0

我有一些运行 Vimscript 函数的自动命令。该函数绑定到TabEnterand BufEnter

但是,当有人进入一个新选项卡时,该函数会运行多次,因为两个 autocmds 都会触发(并且TabEnter似乎在BufEnter使用新缓冲区再次触发之前使用先前的“当前”缓冲区触发......我认为)。

无论如何,当有人进入新标签时,我怎样才能只运行一次我的函数?

4

2 回答 2

1

您没有告诉我们什么时候需要触发您的功能;也许您的事件组合(TabEnter并且BufEnter有些不相关;如果两个选项卡中显示相同的缓冲区怎么办?)已关闭,并且可以通过选择其他事件来解决问题。

除此之外,您还可以:

  • 将最后处理的缓冲区 ( bufnr('')) / window ( winnr()) / ... 存储在脚本局部变量中,如果相同,则短路您的函数
  • 如果问题是您的函数延迟很长,请存储时间戳 ( localtime()) 并在时间过短时短路
  • 如果您可以控制标签切换(但您可能没有),:noautocmd并且:set eventigore+=...可以解决此问题
于 2013-04-19T08:08:04.833 回答
0

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

  • TabLocal设置选项卡局部变量TabEnter,然后处理新选项卡中的所有缓冲区
  • BufEnter查找选项卡局部变量;如果存在,它将清除它并且不执行任何其他操作;如果不存在,它会处理缓冲区。

这是我的代码

于 2014-01-08T12:54:34.637 回答