Vim:`set formatoptions`丢失了?

Dav*_*ver 23 vim

我已经进入set formatoptions=cqn了我的行列vimrc,但出于某种原因它并没有坚持下去.似乎Vim fo=tcq在某个时候恢复到默认值()但是我无法弄清楚为什么.跑步-V100/tmp/log只是给了我:

formatoptions=tcq
  Last set from ~/.vimrc

没有有用的背景.

那么,有没有办法让formatoptions坚持下去?或者我是否只需要创建一个autocmd来在每次加载新文件时重置它?

编辑

使用:verbose set formatoptions显示:

formatoptions=tcq
  Last set from ~/.vimrc

但是,我foformatoptions〜/ .vimrc中唯一的引用是set formatoptions+=cqn.

小智 14

此行为是因为VIM中的C文件插件.由于在加载.vimrc后加载了文件插件,因此会覆盖.vimrc中的设置.
David Wolever给出的解决方案似乎是最好的选择.
在.vimrc中添加以下行:

autocmd BufNewFile,BufRead * setlocal formatoptions+=cqn

...而不是正常的set formatoptions命令.

  • 当你删除BufNewFile和BufRead之间的空间时,它可以工作. (3认同)
  • 这个答案对我来说并不是很有用,但是对它有所改变,[请参阅我在这个问题中的回答](http://stackoverflow.com/a/23326474/207894). (2认同)

小智 5

我也碰到了这个问题.我有类似于项目的配置

autocmd BufRead,BufNewFile project/*.c setlocal formatoptions-=cro
Run Code Online (Sandbox Code Playgroud)

然而,set fo?显示formatoptions=croql.事实证明,我需要BufWinEnter而不是BufRead:

在窗口中显示缓冲区后.这可以是在加载缓冲区(处理模型之后)或在窗口中显示隐藏缓冲区(并且不再隐藏)时.不会发生:没有参数的拆分,因为你继续编辑相同的缓冲区,或者":拆分"一个已经在窗口中打开的文件,因为它重用了现有的缓冲区.但它确实发生了一个带有当前缓冲区名称的":split",因为它重新加载了该缓冲区.

这样可行

autocmd BufWinEnter,BufNewFile project/*.c setlocal formatoptions-=cro
Run Code Online (Sandbox Code Playgroud)


jam*_*nvc 4

根据vim文档formatoptions:

注意:当
设置'compatible'时,此选项设置为Vi默认值,当'compatible'复位时,此选项设置为Vim默认值.

因此,如果兼容的价值在变化的过程中发生变化,那可能会导致您看到的问题.