在Vim中,当进入新标签时,如何忽略BufEnter事件?

时间:2013-04-19 07:54:23

标签: vim

我有一些运行Vimscript函数的autocmds。该函数绑定到TabEnterBufEnter

然而,当某人进入一个新选项卡时,该函数会多次运行,因为两个autocmds都会触发(而TabEnter似乎用之前的"当前"缓冲区触发BufEnter使用新的缓冲区再次触发......我想)。

无论如何,当有人进入新标签时,如何才能运行我的功能?

2 个答案:

答案 0 :(得分:1)

您没有告诉我们何时需要触发您的功能;也许你的事件组合(TabEnterBufEnter有点不相关;如果两个标签中显示相同的缓冲区怎么办?)关闭,可以通过选择其他事件来解决问题。

除此之外,你可以:

  • 将最后处理的缓冲区(bufnr(''))/窗口(winnr())/ ...存储在脚本本地变量中,如果相同则将其短路
  • 如果问题是您的功能延迟很长时间,请存储时间戳(localtime())并在时间过短时短路
  • 如果您在您的控制范围内切换标签(但您可能没有),:noautocmd:set eventigore+=...可以解决此问题

答案 1 :(得分:0)

我通过以下方式解决了这个问题:

  • TabLocalTabEnter上设置一个tab-local变量,然后处理新标签中的所有缓冲区
  • BufEnter查找tab-local变量;如果存在,它会清除它,不做任何其他事情;如果不存在,它会处理缓冲区。

这是my code