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
文件,似乎使其毫无意义。
答案 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
,您将无法使用游标。