Help us understand the problem. What is going on with this article?

Language Server Protocolを使ってvimでpython入力補完

More than 1 year has passed since last update.

Language Server Protocolって?

Language Serverというものを知って、気になったので試してみたっという記事です。
Language Serverについてはこちらの記事を参考にさせていただきました。

私の理解でまとめると、今までIDEとかがやってくれてたキーワード補完や定義の参照など、エディタごとプラグインが必要だったのを、エディタがサーバーにつなぐことで解決しましょう。みたいなことかなと思っています。
例えばVS CodeでPythonシンタックスを使いたければpythonプラグインが必要です。AtomであればAtom用のプラグインが必要です。
エディタの数x言語の数 だけプラグインが必要になります(作る必要があります)。
やりたいことは大体どの言語でも共通なので、言語情報をサーバーに補完しておいて、エディタをクライアントにしてそのサーバーとやり取りできれば、楽じゃないかと。
それが実現すれば好きなエディタでIDEのような機能が使えて素敵じゃないか!っということで感銘を受け、早速愛用のvimでpythonキーワード補完をすべく、あれこれいじってみました。
ちなみにSoftware Design 3月号に掲載されていますので、こちらの記事で理解できない場合はこちらもご参照ください。

プラグインを入れよう

※macでの手順です。windows版はいずれ投稿したい(希望)
vim-lspというブラグインがあるのでこちらを.vimrcに追記します。

.vimrc
Plug 'prabirshrestha/async.vim'
Plug 'prabirshrestha/vim-lsp'

非同期で入力補完を行いたい場合は次も足します。よく分からなければ追記しておきましょう。私のように。

.vimrc
Plug 'prabirshrestha/asyncomplete.vim'
Plug 'prabirshrestha/asyncomplete-lsp.vim'

ただ、これを使うにはvim-plugというプラグインマネージャーが必要です。
私はvim-plugすら知らなかったのでまずここから設定しました。まだ使っていない方は参考にしてください。こちらにまとめてありますのでご参照ください。

言語の設定

各言語設定の仕方が異なりますが、今回はpythonで設定します。他の言語の設定はこちらを参照してください。

python-language-serverのインストール

以下のコマンドを実行します。

terminal
pip install python-language-server

.vimrcに以下を追記します。

.vimrc
if executable('pyls')
    au User lsp_setup call lsp#register_server({
        \ 'name': 'pyls',
        \ 'cmd': {server_info->['pyls']},
        \ 'whitelist': ['python'],
        \ })
endif

追記したら保存、終了

補完を使ってみる

適当なファイルを作ってみて補完できるか試してみましょう

スクリーンショット 2018-03-08 23.37.17.png

最初起動直後はすぐに出てこないこともありますが、数秒待てば出てきます。
deと打つと画像のような補完が出てきてくれます。
補完の候補にフォーカスしたいときはCtrl + n or pで選択できます。

ライブラリなども補完してくれるので、うろ覚えな状態では助かります。
スクリーンショット 2018-03-08 23.42.53.png
補完を使う際に注意すべきはEnterやtabを押すと改行やtab入力になってしまいます。
フォーカスした瞬間に入力もされているのでEnter押したい気持ちをグッと堪える必要があります。
これは慣れが必要か、、、

定義へジャンプ

定義へジャンプするにはLspコマンドを使います。
例えば
スクリーンショット 2018-03-08 23.47.25.png
こんな感じで探したいワードのカーソルを置き、
スクリーンショット 2018-03-08 23.48.58.png
:LspDefinitionを実行します。Lspまでタイプしてtabキーを押すと使えるコマンド候補が出てきます。
スクリーンショット 2018-03-08 23.50.48.png
実行後、カーソルが定義した位置まで移動しました。

こんな短いコードでは何もありがたみも湧きませんが、もっと長いコードになれば助かるのではないでしょうか。

使ってみた所感

今回は1言語だけの導入でしたが、もっといろんな言語を扱う方には便利なシステムになるのではないでしょうか。他にもできることはたくさんあるみたいなので色々勉強してみたいです。
補完候補を選択した時にdefなら定型文みたいにある程度入力してくれると便利です。最初いじってた時にはできた気がしたのですが、いじってるうちにできなくなってました。何かプラグインを外したせいかもしれません。
解決したら追記したいと思います。
この機能を使って、自分の好きなエディタでIDE並みに便利に使えると楽しくなりそうですね。

今回の環境

macvim: Custom Version 8.0.1522 (KaoriYa 20180218)
macOS: High Sierra バージョン10.13.3(17D102)
python: Python 3.6.3
kouichi_c
時期ごとに興味が移り変わる飽き性。ITエンジニア歴より音楽やってた経験のほうが長い、駆け出しエンジニアです。自分が詰まったところの解決法や、気になった技術、備忘録として利用しようと思っています。
withonoware
「より理想へ」というチャレンジ精神を持ち続ける。
https://withonoware.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした