我的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
但是,〜/ .vimrc中对fo
或formatoptions
的唯一引用是set formatoptions+=cqn
。
答案 0 :(得分:14)
此行为是因为VIM中的C文件插件。由于在加载.vimrc后加载了文件插件,因此.vimrc中的设置将被覆盖 David Wolever给出的解决方案似乎是最好的选择 在.vimrc中添加以下行:
autocmd BufNewFile,BufRead * setlocal formatoptions+=cqn
...而不是正常的set formatoptions
命令。
答案 1 :(得分:5)
我也遇到了这个问题。我有项目特定的配置,如
autocmd BufRead,BufNewFile project/*.c setlocal formatoptions-=cro
但是,set fo?
显示formatoptions=croql
。事实证明,我需要BufWinEnter
而不是BufRead
:
在窗口中显示缓冲区后。这个 可以在加载缓冲区时(之后 处理模型)或隐藏时 缓冲区显示在窗口中(并且没有 更长的隐藏)。 不会发生:拆分没有 参数,因为你继续编辑相同的 缓冲区,或":split"用一个已经存档的文件 在窗口中打开,因为它重新使用了一个 现有缓冲区。但它确实发生了 ":分流"使用当前缓冲区的名称, 因为它重新加载了缓冲区。
所以这是有效的
autocmd BufWinEnter,BufNewFile project/*.c setlocal formatoptions-=cro
答案 2 :(得分:4)
我听起来像是来自.vimrc的一些文件,或者插件正在改变这个值。
试图找出它的东西是
启动vim而不采购任何东西,请使用
vim -u NONE
使用NORC
skipps .vimrc但加载插件
检查:help --noplugin
以了解控制采购的各种启动选项。
--noplugin Skip loading plugins. Resets the 'loadplugins' option.
{not in Vi}
Note that the |-u| argument may also disable loading plugins:
argument load vimrc files load plugins ~
(nothing) yes yes
-u NONE no no
-u NORC no yes
--noplugin yes no
也许这也可能有用(来自help: :set
):
When 'verbose' is non-zero, displaying an option value will also tell where it
was last set. Example: >
:verbose set shiftwidth cindent?
< shiftwidth=4 ~
Last set from modeline ~
cindent ~
Last set from /usr/local/share/vim/vim60/ftplugin/c.vim ~
也许......: - )
修改强>
您使用的是compatible
吗?来自help: formatoptions
NOTE: This option is set to the Vi default value when 'compatible' is
set and to the Vim default value when 'compatible' is reset.
答案 3 :(得分:4)
根据formatoptions
上的vim文档:
注意:此选项设置为Vi 'compatible'为
时的默认值 设置和Vim默认值时 'compatible'被重置。
因此,如果兼容的价值在变化的过程中发生变化,那可能会导致您遇到的问题。
答案 4 :(得分:0)
在/usr/share/vim/vim74/ftplugin/vim.vim
中找到:
" Set 'formatoptions' to break comment lines but not other lines,<br>
" and insert the comment leader when hitting <CR> or using "o".<br>
setlocal fo-=t fo+=croql
删除它。然后完成所有事情。