Neovim vim.opt:remove 实际上并没有改变选项

问题描述 投票:0回答:2

我在 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

format neovim ftplugin
2个回答
1
投票

受到这个答案的启发,我尝试使用像这样的分离的

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


0
投票

使用目录后删除

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,
})

它对我有用。

© www.soinside.com 2019 - 2024. All rights reserved.