如何知道在VIM中执行特定操作时将触发哪些事件?

时间:2019-05-29 12:46:20

标签: vim

我正在研究VIM事件,但是我发现某些事件可能无法正常运行,例如使用##TabLeave在选项卡页之间切换时不会触发gt/gT。当我执行特定操作(例如,键入tabmove命令以执行该操作)时,我该怎么办才能知道VIM触发了什么事件?我正在编写一个插件,以使我的VIM标签页可以返回到以前访问过的标签页,但是问题是tabmove命令不会触发任何操作,有人可以帮助我吗?

function! catchSomeEventTriggerByTabmCmd()
let histCmd = histget('cmd', -1)
if match(histCmd, '^tabm') == 0
DoUpdateJumpQueue()
endif
endfunction

1 个答案:

答案 0 :(得分:1)

  

...我发现某些事件可能无法正常运行,例如使用'gt / gT'在选项卡页之间切换时,不会触发## TabLeave。

gt / gT确实触发了TabLeave。例如:

:let g:foo = 1
:autocmd TabLeave * let g:foo = g:foo + 1 | echom "TabLeave Event " . g:foo
:tabnew

现在执行几个gt / gT。您应该会收到消息

  

当我执行特定操作(例如键入“ tabmove”命令以执行该操作)时,如何知道VIM触发了什么事件?我正在编写一个插件,以使我的VIM标签页可以返回到以前访问的标签页,但是问题是'tabmove'命令不会触发任何操作,有人可以帮助我吗?

我不确定您可以使用TabLeave之类的事件/自动命令来捕获:tabmove中的任何内容。由于:tabmove会修改标签页号,因此使用标签页号也可能会很棘手。

幸运的是,Vim总是必须聚焦窗口,因此与其尝试拥有标签页的历史记录,不如拥有一个具有窗口ID的历史记录。您也许可以使用win_getid()win_gotoid()来完成历史记录行为。

有关更多帮助,请参见:

:h win_getid()
:h win_gotoid()
:h windowid