27
19

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.

NeoVimでLSP(Language Server Protocol)を使ったら、定義ジャンプなどが劇的に早くなった

Last updated at Posted at 2018-10-01

こんにちわ

vim8を使ってgoのコーディングをしていたのですが、
マシンパワー不足&なぜかvimが重たくて、定義ジャンプなどが遅いのがかなりストレスだったので、
なんとか改善できないかと試行錯誤した結果、かなり早くになったので同じ状況に悩んでいる方がいたらぜひ試してみてください。

アジェンダ

vim-goとLSPのスピード差異

  • vim-go
    asciicast

  • LSP(Language Server Protocol)
    asciicast

vim-goによるジャンプがもっさりしているのに対して、
LSPはサクッとジャンプしているのは一目瞭然ですね。

ちゃんと調べていないのですが、vim-goの重たい原因はおそらくguruの範囲設定かと。

環境

  • 機体
    MacBook Early 2015
    CPU 1.2 GHz Intel Core M
    メモリ 8 GB 1600 MHz DDR3

  • OS
    MacOS Mojave

  • Editor
    Neovim 0.3.1
    ※vim8でもLSP動きました

  • Plugin
    dein
    vim-lsp
    vim-async

導入

LSPを導入するには以下の様に設定するだけです。
設定ファイルはこちらにあります。

  • dein.toml
[[plugins]]
repo = 'prabirshrestha/async.vim'

[[plugins]]
repo = 'prabirshrestha/vim-lsp'
  • init.vim
let mapleader = "\<Space>"

" 中略...

if executable('go-langserver')
    au User lsp_setup call lsp#register_server({
        \ 'name': 'go-langserver',
        \ 'cmd': {server_info->['go-langserver', '-mode', 'stdio']},
        \ 'whitelist': ['go'],
        \ })
endif

nmap <silent> <Leader>d :LspDefinition<CR>
nmap <silent> <Leader>p :LspHover<CR>
nmap <silent> <Leader>r :LspReferences<CR>
nmap <silent> <Leader>i :LspImplementation<CR>
nmap <silent> <Leader>s :split \| :LspDefinition <CR>
nmap <silent> <Leader>v :vsplit \| :LspDefinition <CR>

LSPのメリットとデメリット

  • メリット
    見ての通り、マシンのパワーがなくてもそれなりに早く動くところが最大のメリットだと思っています。

  • デメリット
    vim-goはgo rungo vetgo lintなど機能が豊富ですが、LSPは現時点で以下の事しかできないようです。

image.png

主にコーディング時に使用する

  • 定義ジャンプ(画面分割も含め)
  • インターフェイス実装検索
  • 定義箇所検索

くらいかと思うので、vim-goの機能と組み合わせればそれなりにコーディングスピードが上がるのではないかなと。
:LspNextErrorなどがあるようですが、いまいち使い方が分かっていないので知っている方いましたら教えて頂けると喜びます。

最後に

LSPが今後もっといろんな事ができるようになって行くと良いなと思いながら、気長に待とうと思います。
ちなみにvimでgoを書いている方で、こうすればもっと小コーディング捗るというのがあれば教えて頂けると喜びます。
なにどぞ…

27
19
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
27
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?