在.vimrc中,“set nocompatible”是完全无用的吗?

在这个史诗般的问题中的几个用户把以下内容放在.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文件存在,似乎使其毫无意义。

如果是全系统的vimrc,这个选项不会closures。 所以,如果你正在改变系统级的vimrc,你需要设置它。

从文档部分*兼容默认* (强调我的):

当Vim启动时,“兼容”选项打开。 这将在Vim开始初始化时使用。 但是,一旦find用户vimrc文件或当前目录中的vimrc文件,或设置了“VIMINIT”环境variables,它将被设置为“nocompatible”。

另一个区别是明确设置与C标志调用vim的“不兼容”的规则。

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

最后,我认为这只是一个“安全而不是遗憾”的问题。

许多人在GitHub上共享他们的.vimrc文件,我有时会在不replace我的.vimrc文件的情况下testing设置。 vim允许我用-u标志来做到这一点。

 vim -u test_vimrc 

从vim“帮助nocompatible”

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

这意味着如果你和别人共享你的.vimrc文件,并使用-u标志来加载你的文件,vim将不会被configuration,就像文件被命名为.vimrc并且位于你的主目录中一样。

我在Windows虚拟机上使用Cygwin中的vim,每次进入插入模式时,按方向键都会导致vim在屏幕上打印“A”,“B”,“C”或“D”而不是滚动。 我发现一个论坛说,把vim放在不兼容的模式将解决它。 谢天谢地,它做到了。

我把“设置不兼容”放在我的〜/ .vimrc文件中,问题依旧。 所以也许这不是100%无用的。

根据Johnny上面指出的,当我刚刚发现这个时,我简直惊呆了:

 $ 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 aka Ubuntu)确实能够通过设置兼容来覆盖默认设置来为用户带来噩梦。 我希望你现在知道为什么当你来自FreeBSD的时候,你要做的第一件事是通过在你自己的~/.vimrc设置一个set nocompatible来覆盖整个系统的设置。 因为否则,你只会产生字母,而不能按照习惯的方式移动光标。

我认为这是一个可怕的想法。 换句话说,这个set compatible行应该从Debian和Ubuntu的系统范围的vimrc.tiny移除 ,因为它会激怒那些不知道如何获取光标键的新用户。 就是因为这些完全毫无意义的阻挡者,他们迫使他们成为nano人和其他人。

我真的很想和那些曾经把这个改变传播到Debian系统资源文件的老兄交谈。 也许对那些最充分承认他的变化的人也是如此。

Johnny是正确的:在你的私人电脑上,你可以从系统范围的.vimrc(如果有的话)中删除上述行,然后在$ HOME上触摸一个空的.vimrc文件 。 非常感谢你指出,再次减less混乱。 请注意,你必须有~/.vimrc (即使是空的!),否则你将无法使用游标而不明确地 set nocompatible