在.vimrc中,`set nocompatible`完全没用?

时间:2011-05-01 00:35:32

标签: vim

this epic question中的多位用户将以下内容放入.vimrc

" Necesary for lots of cool vim things
set nocompatible

但是真的有必要吗?来自文档:

'compatible' 'cp'
    boolean (default on, off when a |vimrc| or |gvimrc| file is found)

如果set nocompatible中有.vimrc,则表示存在.vimrc文件,似乎使其毫无意义。

4 个答案:

答案 0 :(得分:55)

如果是系统范围的vimrc,则此选项不会关闭。因此,如果您要更改系统范围的vimrc并且需要它,则需要进行设置。

从文档部分*compatible-default*(强调我的):

  

当Vim启动时,'兼容'   选项已开启。这将在以下时使用   Vim开始初始化。但   只要找到用户vimrc 文件,   或当前的vimrc文件   目录,或“VIMINIT”   设置环境变量,它会   被设置为'nocompatible'。

另一个不同之处在于明确设置'nocompatible'否则使用-C flag调用vim。

在任何其他情况下,是的,在你的vimrc中设置'nocompatible'是一个noop。

最后我认为这只是“安全而不是抱歉”的问题。

答案 1 :(得分:18)

很多人在GitHub上共享他们的.vimrc文件,我有时会在不替换我的.vimrc文件的情况下测试设置。 vim允许我使用-u标志执行此操作。

vim -u test_vimrc

来自vim":帮助nocompatible"

  

(注意:系统范围的vimrc或gvimrc文件不会发生这种情况,   也不是用| -u |给出的文件参数)。

这意味着,如果您与某人共享.vimrc并且他们使用-u标志来加载您的文件,则vim的配置方式与文件名为.vimrc且位于您的主目录中的情况相同。

答案 2 :(得分:6)

我在Windows VM上使用了Cygwin中的vim,每次我都处于插入模式时,按箭头键会导致vim在屏幕上打印“A”,“B”,“C”或“D”而不是滚动。我发现一个论坛说将vim置于nocompatible模式会修复它。谢天谢地,确实如此。

我在我的〜/ .vimrc文件中放了“set nocompatible”,问题仍然存在。所以也许它不是100%没用。

答案 3 :(得分:-1)

根据约翰尼上面指出的内容,当我刚发现这件事时,我感到很惊讶:

$ cat /usr/share/vim/vimrc.tiny
" Debian system-wide default configuration Vim
set runtimepath=~/.vim,/var/lib/vim/addons,/usr/share/vim/vimfiles,/usr/share/vim/vim74,/usr/share/vim/vimfiles/after,/var/lib/vim/addons/after,~/.vim/after

set compatible

哎呀!!!

不,我没想到。 Debian(或Debian Unstable又名Ubuntu)确实通过设置兼容来覆盖默认设置,从而给用户带来了噩梦。 我希望您现在知道为什么当您来自FreeBSD时,首先要做的是通过将set nocompatible放入您自己的~/.vimrc来覆盖系统范围的设置。因为否则你只是生成字母,而不是像你习惯的那样移动光标。

我认为这是一个可怕的想法。换句话说,这个set compatible行应该从Debian和Ubuntu中的系统范围vimrc.tiny 删除,因为它会惹恼那些尚未(还)的新用户知道如何使光标键工作一样聪明。 像这样的事情迫使他们nano和其他人因为完全没有意义的阻挡者而被迫使用!

我真的想和曾经将此更改传播到Debian中的系统范围资源文件的老兄谈谈。也许对那些最充分地承认他的变化的人也是如此。

Johnny是对的:在您的私人电脑上,您可以从系统范围的.vimrc(如果有)中删除该行,并触摸$ HOME 上的空.vimrc。非常感谢你指出这一点,再次减少混乱。请注意,您必须具有~/.vimrc(即使为空!),否则如果没有显式放入set nocompatible,您将无法使用游标。