阅读关于*:bar* *:\bar*
的vim文档:
'|'
可用于分隔命令,因此您可以在一行中提供多个命令。
我尝试通过此命令清除历史记录:
:set history=0 | set history=20
我希望,这两个命令应该逐个执行,并且应该清除历史记录 但事实并非如此。历史仍然存在,并增加了新的历史。
然后我尝试了:
:set history=0
:set history=20
有效。
为什么?
答案 0 :(得分:7)
当您执行发生的命令行时:
init_hist()
中的getcmdline()
函数调用)。getcmdline()
中)。add_to_history()
中的getcmdline()
)。do_one_cmd()
do_cmdline()
,在getcmdline()
调用后调用(由getexline()
调用fgetline
参数传递给do_cmdline()
) )。设置选项本身不执行任何操作,只有changes p_hi
变量。历史的实际修改在步骤1完成。
现在让我们看看在这两种情况下会发生什么(假设您键入了第二个或第三个附加命令):
p_hi
具有旧值时初始化,然后更改两次,然后当您执行下一个命令时,它已设置为20
。p_hi
具有旧值时初始化,然后更改一次,第二次初始化,在此步骤中被有效截断,然后值再次更改。当你开始输入第三个命令时,它已经被消灭了。因此,您的假设(命令一个接一个地执行)是正确的,但您错误地发现了历史修改。我宁愿建议使用histdel()
作为@Michael建议,因为,首先,它自己清除历史,第二,它没有硬编码的“历史”价值。我不能说你如何生活只有20行历史(我已经设置为65535并且我总是确定我不会丢失任何小的,但有用的),但硬编码这个值将使历史大小改变为其他更痛苦。