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