在.vimrc中,“设置不兼容”是否完全没有用?


77

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


不,它为我的rhel5盒上的插入模式和删除键修复了一些错误
Stephan

Answers:


64

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

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

当Vim启动时,'compatible'选项打开。Vim开始初始化时将使用它。但是,一旦找到用户vimrc文件,或者当前目录中的vimrc文件,或者设置了“ VIMINIT”环境变量,它将被设置为“ nocompatible”。

另一个区别是,显式设置'nocompatible'否决了使用-C标志调用vim的规则。

在任何其他情况下,是的,在vimrc中设置'nocompatible'是没有问题的。

最后,我认为这仅仅是“安全胜于遗憾”的问题。


1
该死,无法直接链接到该-C标志。至少在我的浏览器(Chrome 10,Windows 7)上,它跳转到该-c标志。因此,我链接到了-D上面的。:(
R. Martinho Fernandes

1
:set nocompatible例如,.vimrc中的确实更改了某些设置:set noshowcmd。我不知道为什么。
Martin von Wittich'3

22

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

vim -u test_vimrc

来自vim“:help不兼容”

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

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


4
这是非常重要的一点。我最近很难学到这一点。如果使用-u,则默认情况下兼容功能处于打开状态。结果,vim -u〜/ .vimrc实际上与让vim自己加载〜/ .vimrc不同,除非您添加了“ set nocompatible”。

3
vim -Nu test_vimrc-N指定不兼容模式时,可以加载包含不兼容的Vim配置文件。
乍得斯基特队

是。理想情况下,Vim具有--testvimrc标志,该标志将仅遵循.vimrc本身的(不兼容)设置。让加载设置的标志更改可能的设置之一只是令人困惑和无益。-u和-Nu都是有目的的,但是都没有完全测试.vimrc。

8

我在Windows VM上的Cygwin中使用vim,每次进入插入模式时,按箭头键将导致vim在屏幕上打印“ A”,“ B”,“ C”或“ D”,而不是滚动。我发现了一个论坛,说将vim置于非兼容模式会解决该问题。幸运的是,它做到了。

我在〜/ .vimrc文件中放入了“ set nocompatible”,问题仍然没有解决。因此,也许这不是100%无用的。


6
您无需放入任何东西~/.vimrc。该文件的绝对存在将使vim进入不兼容模式。尝试一下,备份当前的.vimrcmv ~/.vimrc ~/.vimrc.bak并创建一个空的.vimrc touch ~/.vimrc。现在打开vim,看看会发生什么。
约翰尼·布洛尼

7
副作用,我们如何珍惜你。
Dan Bechard 2014年

@JohnnyBaloney好吧,我可以在Ubuntu上告诉您“发生了什么”。retsigam所说的在此发行版中也是如此:没有set nocompatible,vi就是用光标键进行导航的噩梦。当我尝试使用您的测试用例时,我立即又带着那个空的.vimrc遭受了同样的噩梦。但是,您一直以来都是正确的。:-)有关我最近的发现,请参阅其他答案
语法错误,2016年

这个答案是“创建了一个说... [设置不兼容]的论坛”的示例,而实际上就是这个论坛:)
Wyck

-1

基于以上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,又名Ubuntu)确实通过设置compatible覆盖默认设置,给用户带来了噩梦。我希望您现在知道为什么当您来自FreeBSD时,您要做的第一件事就是通过将aset nocompatible放到您自己的中来覆盖系统范围的设置~/.vimrc。因为否则,您只会产生字母,而不能像以前那样移动光标。

我认为这是一个可怕的想法。换句话说,set compatible应该在Debian和Ubuntu中从系统范围删除此行vimrc.tiny,因为它会使新用户烦恼,这些用户还不知道如何使光标键正常工作。正是nano由于这些完全毫无意义的阻止程序,才迫使这些应用程序与其他应用程序抗衡!

我真的想和那个曾经将这一更改传播到Debian中系统范围的资源文件的家伙交谈。也许对那些完全承认他的改变的人也是如此。

约翰尼是对的:在您的私人PC上,您可以从系统范围内的.vimrc中删除该行(如果有),然后在$ HOME上触摸一个空的.vimrc。非常感谢您指出这一点,再次减少了混乱。请注意,您必须具有该值~/.vimrc(即使为空!),否则,如果不显式输入,将无法使用游标set nocompatible


1
中的注释vimrc.tiny解释说,仅当您以vim身份调用vim时才提供它vi,在这种情况下,使vim尝试与之兼容是有意义的vi。运行时此文件不是源文件,并且同一目录中vim的相关vimrc文件不包含它们。所有这些都在vimrc.tiny找到的文件的注释中进行了说明。
马克·斯托斯伯格
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.