こんにちわ
vim8を使ってgoのコーディングをしていたのですが、
マシンパワー不足&なぜかvimが重たくて、定義ジャンプなどが遅いのがかなりストレスだったので、
なんとか改善できないかと試行錯誤した結果、かなり早くになったので同じ状況に悩んでいる方がいたらぜひ試してみてください。
アジェンダ
vim-goとLSPのスピード差異
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動きました
導入
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 run
、go vet
、go lint
など機能が豊富ですが、LSPは現時点で以下の事しかできないようです。
主にコーディング時に使用する
- 定義ジャンプ(画面分割も含め)
- インターフェイス実装検索
- 定義箇所検索
くらいかと思うので、vim-goの機能と組み合わせればそれなりにコーディングスピードが上がるのではないかなと。
:LspNextError
などがあるようですが、いまいち使い方が分かっていないので知っている方いましたら教えて頂けると喜びます。
最後に
LSPが今後もっといろんな事ができるようになって行くと良いなと思いながら、気長に待とうと思います。
ちなみにvimでgoを書いている方で、こうすればもっと小コーディング捗るというのがあれば教えて頂けると喜びます。
なにどぞ…