繁体   English   中英

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

[英]In Vim, when entering a new tab, how to ignore BufEnter event?

我有一些运行Vimscript函数的autocmds。 该函数绑定到TabEnter以及BufEnter

但是,当有人进入新标签页时,该函数会运行几次,因为autocmds都将触发(并且TabEnter似乎先使用先前的“当前”缓冲区触发BufEnter ,然后再使用新缓冲区再次触发它...我认为)。

无论如何,当有人进入新标签页时,如何运行我的函数一次?

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

除此之外,您还可以:

  • 将最后处理的缓冲区( bufnr('') )/窗口( winnr() )/ ...存储在脚本局部变量中,如果相同则短路
  • 如果问题是函数的长时间延迟,请存储时间戳记( localtime() ),并在时间过短时短路
  • 如果您可以控制制表符的切换(但是您可能没有) :noautocmd:set eventigore+=...可以解决这个问题

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

  • TabLocalTabEnter上设置一个标签局部变量,然后处理新标签中的所有缓冲区
  • BufEnter查找制表符局部变量; 如果存在,它将清除并且不执行其他任何操作; 如果不存在,它将处理缓冲区。

这是我的代码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM