48
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-03-08

#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
48
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
48
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?