🧑‍💻

Vim で快適に Go を書く

2022/03/27に公開

はじめに

今回は Vim で Go を快適に書くために行ったことについてまとめたいと思います。Vim で Go を書く際は以下の 4 つの機能があると、ストレスなく快適にコードを書くことができると思います!

  1. コードの自動補完機能
  2. 関数の定義元へ飛べる機能
  3. パッケージの自動インポート機能
  4. 自動フォーマット機能

この記事では Vim にこれらの機能を追加する方法について紹介したいと思います。

環境

筆者は Neovim v0.6.1 を使用しており、プラグインマネージャーは vim-plug を使っています。
vim-plug を使うことを前提にまとめているので、各自お使いのプラグインマネージャーの使い方に合わせて適宜読み替えていただければと思います。
vim-plug のインストール方法は公式の README.md を参考にしてください。

coc.nvim でコードの自動補完機能を追加する

coc.nvim は Vim 上で Language Server を使えるようにしてくれるプラグインです。
インストールすると非同期にコードの自動補完などが行えるようになります。
https://github.com/neoclide/coc.nvim

インストール方法は簡単です。
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 のインストールも必要です。
https://github.com/golang/tools/tree/master/gopls
Go をすでにインストール済みの場合は go install コマンドでインストールできます。

$ go install golang.org/x/tools/gopls@latest

Vim を再度立ち上げるか :CocRestart コマンドで再起動することで Go のコード補完が効くようになるはずです。

coc.nvim には言語ごとに様々な拡張があるので、言語に合わせて導入するのもおすすめです。
Using coc extensions のページからリリースしている拡張機能の一覧が確認できます。
https://github.com/neoclide/coc.nvim/wiki/Using-coc-extensions#implemented-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 のパッケージの自動インポートや自動フォーマットをする機能があるため入れておくと大変便利です。

https://github.com/fatih/vim-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