Vim で快適に Go を書く
はじめに
今回は Vim で Go を快適に書くために行ったことについてまとめたいと思います。Vim で Go を書く際は以下の 4 つの機能があると、ストレスなく快適にコードを書くことができると思います!
- コードの自動補完機能
- 関数の定義元へ飛べる機能
- パッケージの自動インポート機能
- 自動フォーマット機能
この記事では Vim にこれらの機能を追加する方法について紹介したいと思います。
環境
筆者は Neovim v0.6.1 を使用しており、プラグインマネージャーは vim-plug を使っています。
vim-plug を使うことを前提にまとめているので、各自お使いのプラグインマネージャーの使い方に合わせて適宜読み替えていただければと思います。
vim-plug のインストール方法は公式の README.md を参考にしてください。
coc.nvim でコードの自動補完機能を追加する
coc.nvim は Vim 上で Language Server を使えるようにしてくれるプラグインです。
インストールすると非同期にコードの自動補完などが行えるようになります。
インストール方法は簡単です。
vim-plug を使っている場合は init.vim または .vimrc の plug#begin
~ plug#end
の間に以下を記述します。
Plug 'neoclide/coc.nvim', { 'branch': 'release' }
あとは Vim 上 で :PlugInstall
コマンドを実行するだけです。
coc.nvim のインストールが完了すると :CocConfig
コマンドが利用できるようになります。
:CocConfig
コマンドを実行すると coc-settings.json というファイルが開くので以下の記述を追加してください。coc-settings.json は coc.nvim の設定を管理するための JSON ファイルです。
{
"languageserver": {
"golang": {
"command": "gopls",
"rootPatterns": ["go.work", "go.mod", ".vim/", ".git/", ".hg/"],
"filetypes": ["go"],
"initializationOptions": {
"usePlaceholders": true
}
}
}
}
Language Server に gopls という Go の Language Server を使うため gopls のインストールも必要です。go install
コマンドでインストールできます。
$ go install golang.org/x/tools/gopls@latest
Vim を再度立ち上げるか :CocRestart コマンドで再起動することで Go のコード補完が効くようになるはずです。
coc.nvim には言語ごとに様々な拡張があるので、言語に合わせて導入するのもおすすめです。
Using coc extensions のページからリリースしている拡張機能の一覧が確認できます。
※ coc.nvim には Go 用の拡張プラグインで coc-go があるのですが、 Go1.18 で導入されたジェネクリスを使ったコードを書いたところシンタックスエラーが出るようになったため外しました。
coc.nvim を使って関数の定義元へジャンプできるようにする
coc.nvim には coc-definition という関数の定義元へジャンプする機能が用意されているため自分の好きなキーマッピングで登録することで、関数の定義元へジャンプすることが可能です。
筆者は ,cd
で関数の定義元へジャンプできるように設定しています。
nnoremap [coc] <Nop>
nmap ,c [coc]
nmap <silent>[coc]d <Plug>(coc-definition)zz
vim-go
vim-go は Go のパッケージの自動インポートや自動フォーマットをする機能があるため入れておくと大変便利です。
vim-go はプラグインをインストールするだけで使えます。
vim-plug を使っている場合は init.vim または .vimrc の plug#begin
~ plug#end
の間に以下を記述します。
Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' }
Vim 上で :PlugInstall
コマンドを実行すれば vim-go のインストールは完了です。
Vim を再起動することで、パッケージの自動インポートや自動フォーマットが実行されるようになります。
さいごに
今回は、 Vim で Go を快適に書くための設定についてまとめました。もし、 Vim で Go を書きたい場合に参考にしてみてください。
Discussion