nvimでrust-analyzerを使おうとしたらsnippet関連のエラーが出た
2023-02-16
はじめに
vim(nvim)でRustを書こうと思い、rust-analyzerを使ってコードを書こうとセットアップをしていました。しかし、実際にコードを書いてみると、補完候補からprintln!
を選択するとエラーになり、うまく動作しませんでした。
エラー内容
E5108: Error executing lua ...te/pack/packer/start/nvim-cmp/lua/cmp/config/default.lua:30: snippet engine is not configur
ed.
stack traceback:
[C]: in function 'error'
...te/pack/packer/start/nvim-cmp/lua/cmp/config/default.lua:30: in function 'expand'
...re/nvim/site/pack/packer/start/nvim-cmp/lua/cmp/core.lua:472: in function <...re/nvim/site/pack/packer/start/n
vim-cmp/lua/cmp/core.lua:423>
...te/pack/packer/start/nvim-cmp/lua/cmp/utils/feedkeys.lua:47: in function <...te/pack/packer/start/nvim-cmp/lua
/cmp/utils/feedkeys.lua:45>
どうやら、スニペットの設定がなくエラーがでていたようです。色々試した結果、どうやらFunction
を選択するとこのエラーが表示されるようでした。
解決方法
スニペットの設定を加えました。自分はPackerを使ってプラグインをインストールして、luaで設定を書いています。(deinから引っ越しました!)
init.lua
-- スニペットのプラグイン
use { 'hrsh7th/vim-vsnip' }
local cmp = require("cmp")
cmp.setup({
preselect = cmp.PreselectMode.None,
-- スニペットの設定
snippet = {
expand = function(args)
vim.fn["vsnip#anonymous"](args.body)
end,
},
-- 他に色々設定が続く…
})
最後に
スニペット = ユーザ自身がコードなどを登録・呼び出すものという理解だったのですが、どうやらLSPでも使われているみたいですね。(エラーの内容からなんとなくの理解)
とりあえず、vimでRustを書けるようになってよかったです。
自分の設定が悪いのか、Rustのコードを書くときは初回起動直後の補完がもっさりしているのでどうにかしたいなと思います。(PHPだと特に感じない)けど、コードを書くほうが100倍大事なので余裕がある時にやります。