我有一些运行 Vimscript 函数的自动命令。该函数绑定到TabEnter
and BufEnter
。
但是,当有人进入一个新选项卡时,该函数会运行多次,因为两个 autocmds 都会触发(并且TabEnter
似乎在BufEnter
使用新缓冲区再次触发之前使用先前的“当前”缓冲区触发......我认为)。
无论如何,当有人进入新标签时,我怎样才能只运行一次我的函数?
我有一些运行 Vimscript 函数的自动命令。该函数绑定到TabEnter
and BufEnter
。
但是,当有人进入一个新选项卡时,该函数会运行多次,因为两个 autocmds 都会触发(并且TabEnter
似乎在BufEnter
使用新缓冲区再次触发之前使用先前的“当前”缓冲区触发......我认为)。
无论如何,当有人进入新标签时,我怎样才能只运行一次我的函数?
您没有告诉我们什么时候需要触发您的功能;也许您的事件组合(TabEnter
并且BufEnter
有些不相关;如果两个选项卡中显示相同的缓冲区怎么办?)已关闭,并且可以通过选择其他事件来解决问题。
除此之外,您还可以:
bufnr('')
) / window ( winnr()
) / ... 存储在脚本局部变量中,如果相同,则短路您的函数localtime()
) 并在时间过短时短路:noautocmd
并且:set eventigore+=...
可以解决此问题我通过以下方式解决了这个问题:
TabLocal
设置选项卡局部变量TabEnter
,然后处理新选项卡中的所有缓冲区BufEnter
查找选项卡局部变量;如果存在,它将清除它并且不执行任何其他操作;如果不存在,它会处理缓冲区。这是我的代码。