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

公開日:2018-10-14
最終更新:2018-10-24
※この記事は外部サイト(https://qiita.com/gorilla0513/items/783836...)からのクロス投稿です

こんにちわ

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

アジェンダ

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

  • vim-go

  • LSP(Language Server Protocol)

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は現時点で以下の事しかできないようです。

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

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

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

最後に

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

記事が少しでもいいなと思ったらクラップを送ってみよう!
36
+1
@gorillaの技術ブログ

よく一緒に読まれている記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる

技術ブログをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

技術ブログを開設する

Qrunchでアウトプットをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

Markdownで書ける

ログ機能でアウトプットを加速

デザインのカスタマイズが可能

技術ブログ開設

ここから先はアカウント(ブログ)開設が必要です

英数字4文字以上
.qrunch.io
英数字6文字以上
ログインする