Vim:在.vimrc中设置history = 500不生效

时间:2015-12-04 02:36:20

标签: vim

在使用Vim 7.3的Ubuntu 12系统上,发生了一件奇怪的事情。我的:set history=500文件中有~/.vimrc。我在该文件中有许多设置都可以工作。历史记录功能有效:~/.viminfo具有良好的权限,并且其中保留了一些内容:命令和搜索历史记录,光标在文件中的位置,寄存器的内容等。但是,在启动Vim之后,如果我:set all,我会看到history=20,尽管~/.vimrc中有设置。

如果我以交互方式执行:set history=500,那么它会坚持下去。

我对系统中所有与Vim相关的文件进行了递归搜索,寻找一个流氓set history命令,但什么也没找到。

1 个答案:

答案 0 :(得分:3)

在发布我的问题时,我继续对此进行调查,并在提交之前发现了解决方案。这对未来的访客来说很有价值。

答案是:set history必须放在:set nocompatible文件中.vimrc之后。尽管在该选项之前接受了一些其他Vim扩展设置,例如:set backupdir

问题不在于兼容模式下:set history 被拒绝

相反,:set nocompatible具有将历史记录重置为默认值20的副作用:它是我正在寻找的“流氓命令”。

你可以试试这个:

:set nocompatible
:set history=500
:set nocompatible

:set history=500命令生效,但第二个:set nocompatiblehistory更改为20!

事后补遗:

注意:虽然今天处理.vimrc文件意味着nocompatible是正确的,正如评论所指出的那样,历史上并非如此。

您可以在Vim 3.0 sources中看到与我在1994年开始使用的版本非常接近的版本dosource中的cmdline.c函数没有获取任何标志参数,并且在处理.vimrc时不执行任何特殊操作。您必须在:nocompatible中明确设置.vimrc

在较新的资源中,函数do_source通过标志知道它正在处理.vimrc文件,如果文件存在,它会在{{1}中调用一个名为vimrc_found的函数这会重置兼容性标志。

Vim介绍了此行为,但没有为那些继续在options.c文件中存在无用且可能有害的:set nocompatible的用户提供任何有用的诊断信息,将"onion in the varnish"从一个系统带到下。

另外需要注意的是,重置兼容性选项在Vim 3中没有其他副作用。只有设置选项(告诉Vim兼容)。您可以在.vimrc函数的param.c源文件中看到这一点。有一个检查,如果刚刚调整的选项是兼容性选项,并且该选项现在是布尔值true,那么调整无数其他设置以便更像Vi。关闭选项时,没有将历史记录设置为20的行为。

换句话说,由于doset除了清除:set nocompatible之外没有任何其他副作用,并不重要,因为它之前有其他设置。 Vim维护者为compatible添加了副作用,但没有关心旧用户可能仍然在他们的:set nocompatible文件中使用此命令,而不是在顶部。

TL; DR;我不是白痴。