我在 neovim 设置中遇到了一些问题,当我使用 vim.opt:remove 更改
formatoptions
时,发生了一些奇怪的事情。
首先,我的默认
formatoptions
是jcroql
,因为我运行:verbose set formatoptions?
并且它返回:
formatoptions=jcroql
Last set from /usr/share/nvim/runtime/ftplugin/lua.vim line 18
然后,我想更改它,删除
ro
选项。根据这个答案,我应该使用后目录来更改此选项。
因此,我创建了一个文件
~/.config/nvim/after/ftplugin/lua.lua
来更改lua文件的此选项。那么问题来了。
我在这个文件中写道:
vim.opt.formatoptions:remove('ro')
-- vim.cmd([[set fo-=ro]])
使用neovim lua api进行更改
formatoptions
,我发现了
formatoptions=ojqlcr
Last set from Lua
顺序和修饰符发生变化,但
ro
仍在格式选项中。
使用原生方式更改
formatoptions
,又名,
-- vim.opt.formatoptions:remove('ro')
vim.cmd([[set fo-=ro]])
我发现:
formatoptions=jcql
Last set from Lua
而且它有效。
为什么
vim.opt.formatoptions:remove
的行为与文档中描述的不符?我希望 vim.opt.formatoptions:remove('ro')
等于 vim 脚本中的 set fo-=ro
。
此外,有没有办法使用后目录全局删除所有文件类型的
ro
中的formatoptions
?
受到这个答案的启发,我尝试使用像这样的分离的
remove
调用:
-- vim.opt.formatoptions:remove('ro')
vim.opt.formatoptions:remove("r")
vim.opt.formatoptions:remove("o")
-- vim.cmd([[set fo-=ro]])
现在可以了!我发现
:verbose set formatoptions?
是:
formatoptions=jclq
Last set from Lua
虽然默认的
formatoptions
是jcroql
,包括中间的ro
。我发现/usr/share/nvim/runtime/ftplugin/lua.vim line 18
是
setlocal formatoptions-=t formatoptions+=croql
也许只是巧合在
jcroql
中看到formatoptions
。
使用目录后删除
ro
中的formatoptions
似乎是不可能的,因为您必须为您使用的每种文件类型创建一个ftplugin。解决方法是使用 autocmd
:
vim.api.nvim_create_autocmd({ "FileType" }, {
group = vim.api.nvim_create_augroup("FormatOptions", { clear = true }),
pattern = { "*" },
callback = function()
vim.opt_local.fo:remove("o")
vim.opt_local.fo:remove("r")
end,
})
它对我有用。