Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

Vimにcoc.nvimを入れたら便利すぎて感動したっていう話

$
0
0

ぼくはパソコンは実家にしか無く、開発系は全てAndroidのTermuxで済ませなくてはならないので、"ポケットIDE"こと(neo)Vimを使っています。こういうわけで、開発毎に、それぞれの言語の補完プラグイン、Linter(これはうまく動かなかったのだが)を入れ、またファイラを入れ、がんばっていた訳です。

プロローグ

数年前、ネットをVimについてググりサーフィンしていると、"LSP"という単語が目に入りました。"Language Server Protocol"。どうやら、コーディング補助系について規格化したものであるようなのです。
参考:[https://langserver.org/]

Vimに対応させるプラグインも出てきたと聞いて、すぐ飛びついた訳ですが、当時、ぼくは英語力も拙く、READMEさえも読めずにうまく設定すらもできないで諦めてしまいました。

受験を経て、ある程度英語力もついたことだし、または、LSP界隈も活発になっているかも?と期待して、調べてみると、実装も複数なされていて、どうやら聞き覚えのないものも出てきているようです。その一つがcoc.nvimでした。
[https://github.com/neoclide/coc.nvim]

coc.nvimの導入

Vim(8.0.1453以上) || Neovim(0.3.1以上)が必要です。

まず、Node.jsとyarnを入れましょう。

install.sh
apt install nodejs
npm install-g yarn

あとはcoc.nvim自体をいつものパッケージマネージャで加えるだけです。ぼくはvim-plugなのでこうします。

init.vim
Plug 'neoclide/coc.nvim',{'branch':'release'}

そして :PlugInstallですね。

インストール時に色々足りないって注意されたのですが、その都度指摘してくれ、選択すれば自動でそれらをインストールしてくれました。

これで終わりです。以下も参照してみてください。
[https://github.com/neoclide/coc.nvim]

各種設定など

coc.nvimの設定ファイルはコマンド:CocConfigで開くことができます。ただ、デフォルトでも使いにくいわけではないです。

また、coc.nvimのExtension、というものがあり、機能追加・拡張ができます。各言語のlanguageserverもあります。
coc.nvimの拡張専用のパッケージマネージャがあり、それでExtensionを管理してくれます。

試しにtypescript/javascriptのサーバーであるcoc-tsserverを入れてみます。コマンドモードで以下をEnter:

cocinst.vim
:CocInstall coc-tsserver

また、設定すれば、Extensionにないサーバーも使えます。例えば、C系のサーバーのclangdだと、設定ファイルに、

coc-settings.json
{"languageserver":{"clangd":{"command":"clangd","filetypes":["c","cpp","objc","objcpp"]}}}

と書けば使えるようになります。
以下に、各種言語について設定方法などをまとめて下さっているので参照してみてください。
[https://github.com/neoclide/coc.nvim/wiki/Language-servers]

coc.nvimの機能

coc.nvimの各機能を調べてみました。

AutoCompletion

デフォルトで自動の補完が効きました。
cmpl.gif
また、何もサーバーなどを登録せずとも、Vimでデフォルトで使える補完の、ファイル、バッファ、aroundの補完候補は一覧で出てきます。

Diagnostics

エラー、警告、インフォメーションが表示されます。その場所にカーソルを合わせるとメッセージが見れます。
Screenshot_20190625-205610_Termux.jpg

CocList

多機能セレクタと呼ばれるものです。かなり便利です。CtrlPに類似しています。
デフォルトでもextentionのトグル、diagnosticsのリスト表示とジャンプ、symbolの検索まで色々できます。
さらに、拡張coc-listsを入れると、ファイル検索、grep検索、buffer移動など、もう何でもできます…
何でも突っ込んだ感じになる機能ですが、あいまい検索ができるので割とスムーズに操作できます。
recording_20190625_203809.gif

Hover

ヒント(ホバー)を読むことができます。
2019/06/25現在、NeoVimのnightlyビルドではfloating windowが使えるようですが、これはそれにも対応しています。
残念ながら、Termux版はstableのみなのでpreview windowにヒントが表示されています。
Screenshot_20190625-220825_Termux.jpg

References

参照先を一覧にして見ることができます。
Screenshot_20190625-220646_Termux.jpg

Definition

定義にジャンプします。
recording_20190625_215859.gif

機能の呼び出し方

多数の機能がある!と言うことは調べてみて割とすぐにわかったのですが、呼び出し方がちょっと引っかかったのでメモしておきます。

機能呼び出し方
AutoCompletioninsertモードで既に有効
Diagnosticsバッファ横にマーク表示されている
CocList内にリスト有
CocList:CocListコマンドで呼び出し
Hover:call CocAction('doHover')で呼び出し
References<Plug>(coc-references)で呼び出し
Definition<Plug>(coc-definition)で呼び出し

少しバラバラに思えるのですが、多分本当はもっと奥深く体系だった構成なのでしょう。
coc.txtをもっと読み解かなくては……。

まとめや追伸

使ってみた感じですが、Androidスマホでもヌルヌルでサクサク動いて快適です。
これでまたvimが真のideに近づいていけます。
嬉しい限りですね。

この先、新たな発見等をしたら追記していこうと思います。


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>