はじめに
Neovim をインストールして、 dein.vim の plugin manager を使って Go の language server(gopls) を利用できるようにするのに結構手間取ったので、設定方法をメモしておきます。
目次
設定手順
環境
% uname -svo Linux #1 SMP Debian 5.10.162-1 (2023-01-21) GNU/Linux
$ go version go version go1.20 linux/amd64
gopls のインストール
gopls
をインストールします。
$ go install golang.org/x/tools/gopls@latest
$GOPATH/bin
配下にインストールされます。
ここでは、 $HOME/$GOPATH/bin
となっています。
$ ls ~/go/bin/gopls /home/dshimizu/go/bin/gopls
Neovim のインストール
Neovim をインストールします。
やり方はいくつかあると思いますが、ここでは GitHub リポジトリから取得して、 $HOME/.local/neovim
にインストールします。
$ git clone https://github.com/neovim/neovim $ cd neovim $ make CMAKE_EXTRA_FLAGS="-DCMAKE_INSTALL_PREFIX=$HOME/.local/neovim" CMAKE_BUILD_TYPE=Release $ make install
以下のような感じでファイルが配置されます。
$ tree -L 1 .local/neovim/ .local/neovim/ ├── BACKERS.md ├── BSDmakefile ├── CMakeLists.txt ├── CMakePresets.json ├── CONTRIBUTING.md ├── LICENSE.txt ├── MAINTAIN.md ├── Makefile ├── README.md ├── bin ├── build ├── cmake ├── cmake.config ├── cmake.deps ├── cmake.packaging ├── contrib ├── lib ├── runtime ├── scripts ├── share ├── snap ├── src └── test 14 directories, 9 files
パスを通します。
export PATH=$PATH:$HOME/.local/neovim/bin
パスが通っていることを確認します。
$ nvim -v NVIM v0.10.0-dev-102+g85bc9e897 Build type: Release LuaJIT 2.1.0-beta3 システム vimrc: "$VIM/sysinit.vim" 省略時の $VIM: "/home/dshimizu/.local/neovim/share/nvim" Run :checkhealth for more info
dein.vim のインストール
これもやり方はいくつかあると思うけど、ここではインストールスクリプトを使って ~/.config/nvim/dein
配下に インストールします。
$ curl https://raw.githubusercontent.com/Shougo/dein-installer.vim/main/installer.sh > installer.sh $ ./installer.sh ~/.config/nvim/dein
以下のような出力がされますので、 2 neovim path (~/.config/nvim/init.vim)
を選択するため、 2
を入力します。
[ CONFIG LOCATION ] 1 vim path (~/.vimrc) 2 neovim path (~/.config/nvim/init.vim) Select your editor config location (eg. 1 or 2) 2
以下のように GitHub からソースを取得されて配置されるようなログが出ます。
~/.config/nvim/init.vim
がある場合は、バックアップされて、dein
用のものが配置されるようです。
Cloning Dein.vim into '/home/dshimizu/.config/nvim/dein/repos/github.com/Shougo/dein.vim'... remote: Enumerating objects: 66, done. remote: Counting objects: 100% (66/66), done. remote: Compressing objects: 100% (55/55), done. remote: Total 66 (delta 2), reused 30 (delta 0), pack-reused 0 Unpacking objects: 100% (66/66), 80.78 KiB | 3.85 MiB/s, done. From https://github.com/Shougo/dein.vim * branch master -> FETCH_HEAD * [new branch] master -> origin/master Looking for an existing 'init.vim' config... Found init.vim. Creating backup in '/home/dshimizu/.config/nvim/init.vim.pre-dein-vim'... Using the Dein.vim config example and adding it to '/home/dshimizu/.config/nvim/init.vim'... _______________________________________________________________ ####### ######## ### ### ### ### ### ### ########### ##! ### ##! ##! ##!#!### ##! ### ##! ##! ##! ##! #!# !#! #!!!:! !!# #!##!!#! #!# !#! !!# #!! !#! #!# !!: !!! !!: !!: !!: !!! !:..:! !!: !!: !!: :::::: :::::::: ::: ::: :: :: :: ::: ::: ::: by Shougo • MIT License • v3.0 _______________________________________________________________ All done. Look at your init.vim file to set plugins, themes, and more. ● Documentation: /home/dshimizu/.config/nvim/dein/repos/github.com/Shougo/dein.vim/doc/dein.txt ● Chat with the community: https://gitter.im/Shougo/dein.vim ● Report issues: https://github.com/Shougo/dein.vim/issues
これで、 ~/.config/nvim/dein
が作成されます。
また init.vim
も配置されます。
/home/dshimizu/.config/nvim/ ├── dein ├── init.vim ├── pack └── plugins
dein.vim の設定
~/.config/nvim/dein/dein.toml
に以下の設定を追記します。
[[plugins]] repo = 'neovim/nvim-lspconfig' hook_add = ''' lua <<EOF local lspconfig = require'lspconfig' lspconfig.gopls.setup{} EOF ''' [[plugins]] repo = 'nvim-lua/completion-nvim'
~/.config/nvim/dein/dein_lazy.toml
を新規作成し、以下の設定を記述します。
[[plugins]] repo = 'Shougo/neco-vim' [[plugins]] repo = 'Shougo/denite.nvim' [[plugins]] repo = 'Shougo/deoplete.nvim' [[plugins]] repo = 'Shougo/neomru.vim'
~/.config/nvim/init.vim
に call dein#load_toml('~/.config/nvim/dein/dein.toml', {'lazy': 0})
, call dein#load_toml('~/.config/nvim/dein/dein_lazy.toml', {'lazy': 1})
を追記します。
また、最後の if~ call dein#install() ~ endif
の部分をコメントアウトをアンコメントして、plugin を自動でインストールできるようにしておきます。 それか Neovim 起動時に :call dein#install()
を実行します。
" Ward off unexpected things that your distro might have made, as " well as sanely reset options when re-sourcing .vimrc set nocompatible " Set Dein base path (required) let s:dein_base = '/home/dshimizu/.config/nvim/dein' " Set Dein source path (required) let s:dein_src = '/home/dshimizu/.config/nvim/dein/repos/github.com/Shougo/dein.vim' " Set Dein runtime path (required) execute 'set runtimepath+=' . s:dein_src " Call Dein initialization (required) call dein#begin(s:dein_base) call dein#add(s:dein_src) " Your plugins go here: "call dein#add('Shougo/neosnippet.vim') "call dein#add('Shougo/neosnippet-snippets') "call dein#add('/home/dshimizu/.config/nvim/dein/dein.toml') call dein#load_toml('~/.config/nvim/dein/dein.toml', {'lazy': 0}) call dein#load_toml('~/.config/nvim/dein/dein_lazy.toml', {'lazy': 1}) " Finish Dein initialization (required) call dein#end() " Attempt to determine the type of a file based on its name and possibly its " contents. Use this to allow intelligent auto-indenting for each filetype, " and for plugins that are filetype specific. if has('filetype') filetype indent plugin on endif " Enable syntax highlighting if has('syntax') syntax on endif " Uncomment if you want to install not-installed plugins on startup. if dein#check_install() call dein#install() endif
発生したエラーとその対処
1つ目
以下のようなエラーが出ました。
Spawning language server with cmd: `gopls` failed. The language server is either not installed, missing from PATH, or not executable.
gopls にパスが読めない場合に発生するので、パスが通っているか確認して、通っていない場合はパスを設定します。
2 つ目
Neovim を起動したときに以下のようなエラーが出ました。
[deoplete] deoplete requires Python3 support("+python3"). VimEnter Autocommands for "*"..function deoplete#enable[9]..deoplete#initialize[1]..deoplete#init#_initialize[15]..deoplete#init#_channel[59]..VimEnter Autocommands for "*"..function deoplete#enable[9]..deoplete#initialize[1]..deoplet e#init#_initialize[15]..deoplete#init#_channel[42]..deoplete#init#_python_version_check の処理中にエラーが検出されました: 行 8: E319: No "python3" provider found. Run ":checkhealth provider"
Neovim の pip ライブラリが必要なようですのでインストールします。
$ pip3 install neovim
neovim を起動し、以下を実行します。
:checkhealth provider
以下を実行するようなメッセージが出力されたら、以下も実行します。
:UpdateRemotePlugins
確認
これで、Neovim で language server(gopls) を起動できるようになりました。 適当にコードをエラーになるコードを書いてみると、以下のように表示されます。
package main import "fmt" func main() { fmt.Printn("Hello World") ■ undefined: fmt.Printn }
まとめ
Neovim をインストールして、 dein.vim の plugin manager を使って Go の language server(gopls) を利用できるようにするための設定がうまくできなかったのでその手順を記載しました。