NeovimでGoの環境構築

NeovimでGoの環境構築

経緯

仕事で Go を書く機会があった。一時的であれば VS Code などでちゃちゃっと終わらせようかと思ったが、今後も書く機会がありそうだったので Neovim で構築していく。

対象環境

Go をインストールする

公式からインストールでも良いが、私の Windows 環境では Scoop でいろいろと管理しているため GoScoop でインストールする。

{{ card(title=“Go | Scoop”, url=“https://github.com/ScoopInstaller/Main/blob/master/bucket/go.json”) }}

scoop bucket add main
scoop install main/go

ちなみに Scoop のインストールもコマンドで簡単に出来る。

{{ card(title=“Scoop”, url=“https://scoop.sh”) }}

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression

gopls をインストールする

Neovim の設定もだが、まずは gopls をインストールする。

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

インストールチェック

gopls version
golang.org/x/tools/gopls v0.17.1

gopls のインストール完了した。

coc-settings.json を編集

coc-go はインストールせずに、 coc-settings.json に言語設定を記述する方法を採用。
gopls のドキュメントにも書かれている。

{{ card(title=“gopls | GitHub”, url=“https://github.com/golang/tools/blob/master/gopls/doc/vim.md#cocnvim”) }}

{
  "languageserver": {
    "golang": {
      "command": "gopls",
      "rootPatterns": ["go.work", "go.mod", ".vim/", ".git/", ".hg/"],
      "filetypes": ["go"],
      "initializationOptions": {
        "usePlaceholders": true
      }
    }
  }
}

coc-go でもセットアップ出来るらしいが、 gopls 公式ドキュメントに書かれている方法を採用した。

init.lua を編集

使いやすくするための設定として以下を init.lua に追加した。

vim.cmd("autocmd BufWritePre *.go :call CocAction('runCommand', 'editor.action.organizeImport')")

これで環境構築完了!

Neovim に標準のLSP環境が出来てからあまり聞かなくなった coc.nvimcoc.nvim で調べても3年前とか4年前の記事が多い…
Neovim 標準のLSPでオールインワンなプラグイン出ないかなぁ。