首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >‘:vim中的bar`不像预期的那样工作

问‘:vim中的bar`不像预期的那样工作
EN

Stack Overflow用户
提问于 2012-06-16 14:39:11
回答 1查看 90关注 0票数 1

在阅读了有关*:bar* *:\bar*的vim文档之后

'|'可以用于分隔命令,因此可以在一行中提供多个命令。

我试图通过这个命令清除历史:

代码语言:javascript
复制
:set history=0 | set history=20

我希望,这两个命令应该一个一个地执行,历史应该被清除。

但事实并非如此,历史仍然存在,新的历史被加入。

然后我试着:

代码语言:javascript
复制
:set history=0
:set history=20

它起作用了。

为什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-16 20:33:23

当您执行命令行时,会发生这样的情况:

  1. 历史记录被初始化(截断发生在这里) (init_hist()函数调用在getcmdline()中)。
  2. 获得要执行的字符串(在getcmdline()中)。
  3. 它被添加到历史中(add_to_history()调用在getcmdline()中)。
  4. 它被执行(do_one_cmd() in do_cmdline(),发生在getcmdline()调用之后(由getexline()调用,作为fgetline参数传递给do_cmdline()))。

设置选项本身什么也不做,它只做变化 p_hi变量。历史的实际修改是在步骤1进行的。

现在,让我们看看在这两种情况下会发生什么(假设您输入了第二个或第三个附加命令):

  1. 当p_hi具有旧值时,首先初始化历史记录,然后将其更改两次,然后在执行下一步命令时将其设置为20。
  2. 当p_hi具有旧值时,首先初始化历史,然后将其更改一次,第二次初始化,这一步有效地截断了历史,只有在此之后,值才会再次更改。当您开始输入第三个命令时,它已经被清除了。

因此,您的假设(命令是一个接一个地执行)是正确的,但是您错了历史修改发生的时间点。我更愿意像@Michael建议的那样使用histdel(),因为最初它会自动清除历史,而在第二,它没有硬编码的“历史”值。我不能说你如何生活在20行长的历史中(我已经将它设置为65535,并且始终确信我不会丢失任何小的,但有用的东西),但是硬编码这个值将使改变历史的大小变得更痛苦。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11064341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档