Closed18

Neovim設定のLua化やっていくぜ

eetann / えーたんeetann / えーたん

LuaのLSPを追加。
とりあえず自分はインデントとクオートの設定だけできれば今は良い。そのため、formatterを別のものにしてる人も多いみたいだけど、そうしなかった。
https://github.com/eetann/dotfiles/blob/f3975dd5115d29f49074664e4f531bdd64d78bfe/vim/plug/nvim-lspconfig.vim#L208-L243

eetann / えーたんeetann / えーたん

移行中に確認するためのメモ

nvim --cmd "set runtimepath+=~/dotfiles/.config/nvim"  -u ~/dotfiles/.config/nvim/init.lua
eetann / えーたんeetann / えーたん

whichwrapの箇所で以下のようなエラーが出た。

E5113: Error while calling lua chunk: vim/_meta.lua:0:
stack traceback:
        [C]: in function 'nvim_set_option_value'
        vim/_meta.lua: in function '_set'
        vim/_meta.lua: in function '__newindex'
        /home/hoge/dotfiles/.config/nvim/lua/rc/base.lua:58: in main chunk

問題のコード

vim.opt.whichwrap = { "b", "s", "h", "l", "[", "]", "<", ">", "~" }

Getting started using Lua in Neovim
をみて、whichwrapもテーブルで書けると思ったが、そうではないらしい。
以下で動いた。

vim.opt.whichwrap = "b,s,h,l,[,],<,>,~"
eetann / えーたんeetann / えーたん

vim.opt.completeoptで以下のようなエラーが出た。

Error detected while processing /home/hoge/dotfiles/.config/nvim/init.lua:
E5113: Error while calling lua chunk: vim/_meta.lua:0: E474: Invalid argument
stack traceback:
        [C]: in function 'nvim_set_option_value'
        vim/_meta.lua: in function '_set'
        vim/_meta.lua: in function '__newindex'
        /home/hoge/dotfiles/.config/nvim/lua/rc/base.lua:44: in main chunk

問題のコードは以下。

vim.opt.completeopt = { "menuone", "popup" }

popupはNeovimにはなく、Vimだけらしい。前まで.vimrcでnvimかどうか判定して変えていたのを忘れていた。
代わりにpreviewを指定した。

vim.opt.completeopt = { "menuone", "preview" }
eetann / えーたんeetann / えーたん

machakann/vim-sandwichでデフォルトのレシピをコピーする場合、vim.tbl_extendではなくvim.list_extendを使う。

vim.g["sandwich#recipes"] = vim.list_extend(vim.deepcopy(vim.g["sandwich#default_recipes"]), {
	{ buns = { "(", ")" }, input = { "jb" } },
	{ buns = { "(", ")" }, input = { "j(" } },
	{ buns = { "(", ")" }, input = { "j)" } },
	{ buns = { "(", ")" }, input = { "j8" } },
	{ buns = { "(", ")" }, input = { "j9" } },
	{ buns = { "[", "]" }, input = { "j[" } },
	{ buns = { "[", "]" }, input = { "j[" } },
	{ buns = { "[", "]" }, input = { "jB" } },
	{ buns = { "{", "}" }, input = { "j}" } },
	{ buns = { "{", "}" }, input = { "j{" } },
	{ buns = { "<", ">" }, input = { "j<" } },
	{ buns = { "<", ">" }, input = { "j>" } },
	{ buns = { "<", ">" }, input = { "ja" } },
	{ buns = { "≪", "≫" }, input = { "jA" } },
	{ buns = { "「", "」" }, input = { "jk" } },
	{ buns = { "『", "』" }, input = { "jK" } },
	{ buns = { "〈", "〉" }, input = { "jy" } },
	{ buns = { "《", "》" }, input = { "jY" } },
	{ buns = { "【", "】" }, input = { "jr" } },
	{ buns = { "【", "】" }, input = { "js" } },
	{ buns = { "〔", "〕" }, input = { "jt" } },
})
eetann / えーたんeetann / えーたん

hrsh7th/nvim-cmpでcommand modeでファイル名補完をするときのメモ。

hrsh7th/cmp-pathを使っていると、Insert modeであればそもそもディレクトリを表す./をトリガーとして、以下のように末尾の/は補完に含まれない。そのため、以下の画像のように「候補からディレクトリ名を選択」→「/を入力」→「候補からディレクトリ名を選択」、、、となる。
画像

command modeで、:e zのように入力し、同じようにディレクトリ名zshの補完を期待するとする。
しかし、コマンドライン補完のためにhrsh7th/cmp-cmdlineを使用していると、ディレクトリ名を選択しても末尾に/がついてしまい、そのディレクトリの中にあるファイル名の補完が発動しにくくなる。
画像

これは、トリガーの都合上cmp-cmdlineの優先され、さらにcmp-cmdline補完候補を作成する際に使用しているgetcompletionでは、上記のディレクトリの末尾の/を含んで出力されるからだと思う(ちょっと自信がない)。

対策1
cmp-pathならディレクトリ名末尾の/は取り除いてくれるので、
:e zではなく:e ./zのようにトリガーとなる文字.(=カレントディレクトリ)などを入力しておく。

対策2
nvim-cmpの設定で、専用のマッピングを追加してみた。
選択中の補完候補に対して、末尾の文字を一旦切り取り、補完を閉じてから末尾の文字を再度入力させている。

https://github.com/eetann/dotfiles/blob/aeda8575b49de8a6f31028892a4de7807da99aa3/.config/nvim/lua/plug/completion.lua#L83-L102

eetann / えーたんeetann / えーたん

wbthomason/packer.nvimpacker消す?みたいな画面よく現れるし、遅延読み込みじゃなくて普通にpackerも読み込ませたかったので、vim.cmd([[packadd packer.nvim]])は消して、use({ "wbthomason/packer.nvim" })optは指定せずに記述した。

eetann / えーたんeetann / えーたん

lualineでオリジナルのモードを判定して表示させる。
たとえば、dhruvasagar/vim-table-modeのテーブルモードが有効になっているか判定する設定は以下。

https://github.com/eetann/dotfiles/blob/3a5fb484ec109be3d3bb4a16efe627f226faa6eb/.config/nvim/lua/plug/lualine.lua#L6-L12

普通に文字列返す関数を書いて、lualine_aなどに渡している。
表示する文字列は長いとゴチャつくので、アイコンとかのほうがいいかも。

また、pasteオプションが有効かどうかも表示させた。

https://github.com/eetann/dotfiles/blob/3a5fb484ec109be3d3bb4a16efe627f226faa6eb/.config/nvim/lua/plug/lualine.lua#L27

関数を渡すのではなく、luaの三項演算子てきなやつを書いた。

このスクラップは2022/07/23にクローズされました