Vim:设置历史=500英寸。vimrc未生效

Vim:设置历史=500英寸。vimrc未生效,vim,Vim,在使用Vim 7.3的Ubuntu12系统上,发生了一件奇怪的事情。我的~/.vimrc文件中有:设置历史=500。我在该文件中有许多设置,所有这些都可以工作。历史记录功能可以正常工作:~/.viminfo具有良好的权限,并且其中保留了一些内容:命令和搜索历史记录、光标在文件中的位置、寄存器的内容等等。但是,在启动Vim后,如果我执行:set all,我会看到history=20,尽管在~/.vimrc中进行了设置 如果我以交互方式执行:设置history=500,则它将保持不变 我对系统中所有

在使用Vim 7.3的Ubuntu12系统上,发生了一件奇怪的事情。我的
~/.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
将对其进行关闭。