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

Clo*_*boy 70 vim

这个史诗般的问题中的几个用户将以下内容放入.vimrc:

" Necesary for lots of cool vim things
set nocompatible
Run Code Online (Sandbox Code Playgroud)

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

'compatible' 'cp'
    boolean (default on, off when a |vimrc| or |gvimrc| file is found)
Run Code Online (Sandbox Code Playgroud)

如果set nocompatible进入a .vimrc,这意味着.vimrc文件存在,似乎使它毫无意义.

R. *_*des 57

如果它是系统范围的vimrc,则此选项不会关闭.因此,如果您正在更改系统范围的vimrc而您想要它,则需要进行设置.

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

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

另一个区别是显式设置'nocompatible'覆盖调用带有-C标志的 vim .

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

最后,我认为这只是"更安全而不是抱歉"的问题.

  • +1再次,整个世界*不是错误的.:\ (3认同)

Cha*_*ers 19

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

vim -u test_vimrc
Run Code Online (Sandbox Code Playgroud)

来自vim":help nocompatible"

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

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

  • 这是非常重要的一点.我最近很难学到这一点.如果使用-u,则默认启用兼容性.因此,vim -u~/.vimrc实际上与让vim自己加载〜/ .vimrc不同 - 除非你添加"set nocompatible". (4认同)
  • 不包含nocompatible的Vim配置文件可以使用`vim -Nu test_vimrc`加载,因为-N指定不兼容模式. (3认同)

ret*_*gam 6

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

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

  • 你不需要在`〜/ .vimrc`中放任何东西.该文件的绝对存在将使vim进入*nocompatible*模式.试试吧,备份你当前的.vimrc`mv~/.vimrc~/.vimrc.bak`并创建一个空的`touch~/.vimrc`.现在打开vim,看看会发生什么. (6认同)
  • 哦,副作用,我们如何珍惜你. (6认同)