在阅读了有关*:bar* *:\bar*的vim文档之后
'|'可以用于分隔命令,因此可以在一行中提供多个命令。
我试图通过这个命令清除历史:
:set history=0 | set history=20我希望,这两个命令应该一个一个地执行,历史应该被清除。
但事实并非如此,历史仍然存在,新的历史被加入。
然后我试着:
:set history=0
:set history=20它起作用了。
为什么?
发布于 2012-06-16 20:33:23
当您执行命令行时,会发生这样的情况:
init_hist()函数调用在getcmdline()中)。getcmdline()中)。add_to_history()调用在getcmdline()中)。do_one_cmd() in do_cmdline(),发生在getcmdline()调用之后(由getexline()调用,作为fgetline参数传递给do_cmdline()))。设置选项本身什么也不做,它只做变化 p_hi变量。历史的实际修改是在步骤1进行的。
现在,让我们看看在这两种情况下会发生什么(假设您输入了第二个或第三个附加命令):
p_hi具有旧值时,首先初始化历史记录,然后将其更改两次,然后在执行下一步命令时将其设置为20。p_hi具有旧值时,首先初始化历史,然后将其更改一次,第二次初始化,这一步有效地截断了历史,只有在此之后,值才会再次更改。当您开始输入第三个命令时,它已经被清除了。因此,您的假设(命令是一个接一个地执行)是正确的,但是您错了历史修改发生的时间点。我更愿意像@Michael建议的那样使用histdel(),因为最初它会自动清除历史,而在第二,它没有硬编码的“历史”值。我不能说你如何生活在20行长的历史中(我已经将它设置为65535,并且始终确信我不会丢失任何小的,但有用的东西),但是硬编码这个值将使改变历史的大小变得更痛苦。
https://stackoverflow.com/questions/11064341
复制相似问题