Vim:设置历史=500英寸。vimrc未生效
在使用Vim 7.3的Ubuntu12系统上,发生了一件奇怪的事情。我的Vim:设置历史=500英寸。vimrc未生效,vim,Vim,在使用Vim 7.3的Ubuntu12系统上,发生了一件奇怪的事情。我的~/.vimrc文件中有:设置历史=500。我在该文件中有许多设置,所有这些都可以工作。历史记录功能可以正常工作:~/.viminfo具有良好的权限,并且其中保留了一些内容:命令和搜索历史记录、光标在文件中的位置、寄存器的内容等等。但是,在启动Vim后,如果我执行:set all,我会看到history=20,尽管在~/.vimrc中进行了设置 如果我以交互方式执行:设置history=500,则它将保持不变 我对系统中所有
~/.vimrc
文件中有:设置历史=500
。我在该文件中有许多设置,所有这些都可以工作。历史记录功能可以正常工作:~/.viminfo
具有良好的权限,并且其中保留了一些内容:命令和搜索历史记录、光标在文件中的位置、寄存器的内容等等。但是,在启动Vim后,如果我执行:set all
,我会看到history=20
,尽管在~/.vimrc
中进行了设置
如果我以交互方式执行:设置history=500
,则它将保持不变
我对系统中所有与Vim相关的文件进行了递归搜索,寻找一个rogue
set history
命令,但什么也没有找到。在发布问题时,我继续探究这个问题,并在提交之前找到了解决方案。这对未来的游客可能很有价值
答案是:set history
必须放在.vimrc
文件中的:set nocompatible
之后。尽管在该选项之前接受了一些其他Vim扩展设置,例如:set backupdir
,但这是事实
问题不是在兼容模式下拒绝:设置历史记录
相反,:set nocompatible
的副作用是将历史记录重置为默认值20:这是我正在寻找的“rogue命令”
您可以尝试以下方法:
:set nocompatible
:set history=500
:set nocompatible
:set history=500
命令生效,但第二个:set nocompatible
将history
更改为20
尸检附录:
注意:虽然今天处理.vimrc
文件确实意味着不可兼容
,但正如一条评论所指出的那样,历史上并非如此。
您可以在与1994年开始使用的版本非常匹配的中看到,中cmdline.c
中的dosource
函数在处理.vimrc
时不带任何标志参数,也不做任何特殊操作。必须在.vimrc
中明确设置:nocompatible
在较新的源代码中,函数do\u source
通过一个标志知道它正在处理一个.vimrc
文件,如果该文件存在,它将调用options.c
中名为vimrc\u found
的函数,该函数将重置兼容性标志
Vim引入了这种行为,但没有为用户提供任何有用的诊断,这些用户的:在他们的.vimrc
文件中设置nocompatible
,从一个系统传输到下一个系统
另一件需要注意的事情是,重置兼容性选项在Vim 3中没有额外的副作用。仅设置选项(告诉Vim兼容)。您可以在doset
函数的param.c
源文件中看到这一点。有一个检查,如果刚刚调整的选项是兼容性选项,并且该选项现在为布尔真,那么调整无数其他设置以使其更像Vi。没有在关闭该选项时将历史设置为20这样的行为
换句话说,由于:set nocompatible
一次除了清除compatible
之外没有任何副作用,之前有其他设置也没关系。Vim维护人员在:set nocompatible
中添加了副作用,而不考虑老用户可能仍然在.vimrc
文件中使用此命令,而不是在顶部
TL;博士我不是白痴。一切都应该放在不可容忍之后。nocompatible更改了很多设置,不值得费心去弄清楚哪些设置被更改了。您甚至不需要设置它,因为vimrc会隐式地设置它。@FDinoff在这种情况下,它在~/.vimrc
中的唯一作用应该是。。。发出警告诊断。每个人的~/.vimrc
中的第一行应该是set nocompatible
。但是,最好将其包装在一个条件中,仅当模式以前兼容时才设置它,if&compatible
然后设置它。@FDinoff请参见编辑。当我开始使用Vim时:set nocompatible
除了将参数清除为零之外没有任何副作用,加载。vimrc
不会影响兼容性选项。@Corey这是错误的。在需要它的时候,它是否是第一行并不重要。现在,它不是必需的,可能会干扰其他.vimrc
文件的设置。例如,如果在/etc/
中的主Vimrc文件中设置历史记录
,则:在本地中设置不可兼容
。Vimrc
将对其进行关闭。