黒縁眼鏡は海を飛ぶ

IT中心にそこはかとなく

Language Serverというものを知った

Language Server

少し前からTwitterあたりでLanguage Serverなるものについてのtweetを見かけるようになりました。 調べようと思ってそのまま放置していたのですが、近所に図書館があることが発覚したので、図書館開拓のついでに調べたことを書きます。

調べ始める前の認識

Language Server(またはLanguage Server Protocol)を観測するようになったのはVimの補完周りについてのtweetだったので、「neocompleteとかdeopleteと同じ補完関連の用語なのかなぁ」という認識でした。

ざっと調べて

Language Serverとは、色々な高機能エディタが(標準で、あるいはプラグインの形式で)もっている自動補完や変数やメソッドの検索/ジャンプといった、プログラミングする上で便利な機能をサーバ機能として提供するものです。 クライアント(エディタ)はLanguage Server Protocol(LSP)に従ってこの言語サーバを利用することで、エディタ/言語毎にプラグインを作成/導入することなく、言語サポートの恩恵を受けることができます。

VimのLSPプラグインはvim-lspがあるようなので、ちょっと使ってみました。

使ってみる

PythonでLSPを利用するためにはpython-language-serverが必要になるのでインストールします。

sudo pip install python-language-server

Vim側にいくつか必要なプラグインを導入します。 私はdein.vimを使っているので、dein.tomlに以下を記載しました。

[[plugins]]
repo = 'prabirshrestha/asyncomplete.vim'

[[plugins]]
repo = 'prabirshrestha/async.vim'

[[plugins]]
repo = 'prabirshrestha/vim-lsp'
hook_add = '''
  if executable('pyls')
      " pip install python-language-server
      au User lsp_setup call lsp#register_server({
          \ 'name': 'pyls',
          \ 'cmd': {server_info->['pyls']},
          \ 'whitelist': ['python'],
          \ })
  endif
'''

[[plugins]]
repo = 'prabirshrestha/asyncomplete-lsp.vim'

これだけで使えるようになります。 <TAB><C-p><C-n>で補完候補を選択できますが、よく間違ってEnter押して改行されてしまうので、慣れか弄るかする必要がありそうです。

f:id:ryo14_ana:20190113152801g:plain

使ってみて

表面の表面しか触ってませんし、使い込んでみるとどうなるかはわかりませんが、とてもいい感じ。 使っていきながら困ったところが出てきたら調整していこうと思います。

参考リンク