Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何知道在VIM中执行特定操作时将触发哪些事件?_Vim - Fatal编程技术网

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

如何知道在VIM中执行特定操作时将触发哪些事件?,vim,Vim,我正在研究VIM事件,但我发现有些事件可能无法正常工作,如使用gt/gt在选项卡页面之间切换时不会触发#TabLeave。当我在执行特定操作时,如键入tabmove命令来执行该操作,如何知道VIM触发了什么事件?我正在编写一个插件,使我的VIM tabpage可以返回到以前访问过的tabpage,但问题是tabmove命令不会触发任何东西,有人能帮我吗 function! catchSomeEventTriggerByTabmCmd() let histCmd = histget('cmd',

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

function! catchSomeEventTriggerByTabmCmd()
let histCmd = histget('cmd', -1)
if match(histCmd, '^tabm') == 0
DoUpdateJumpQueue()
endif
endfunction
。。。我发现有些事件可能无法正常工作,例如使用“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 tabpage可以返回到以前访问过的tabpage,但问题是'tabmove'命令不会触发任何东西,有人可以帮我吗

function! catchSomeEventTriggerByTabmCmd()
let histCmd = histget('cmd', -1)
if match(histCmd, '^tabm') == 0
DoUpdateJumpQueue()
endif
endfunction
我不确定您是否可以使用类似于
TabLeave
的事件/自动cmd从
:tabmove
捕获任何内容。由于
:tabmove
会修改标签页码,因此使用标签页码可能也会很棘手

幸运的是,Vim总是需要关注一个窗口,因此,与其尝试创建选项卡页面的历史记录,不如创建一个具有窗口id的历史记录。您可以使用
win\u getid()
win\u gotoid()
来完成您的历史记录行为

有关更多帮助,请参阅:

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

嗨,马特,谢谢分享这个链接,这帮了大忙!嗨,彼得,衷心感谢你的回答,是的,我错了,gt/gt确实触发了活动#TabLeave。我已经找到了一种跟踪tabmove命令的方法,即使它没有触发任何与tabpage相关的事件。我的方法是在#TabEnter事件发生时,通过预定义函数tabpagenr()存储TabPageNumber,然后在#TabLeave事件发生时将其与TabPageNumber进行比较,因为在切换tabpages时,这两个数字应始终保持不变,但如果两者之间有tabmove命令,则不会。所以基本上,根据这一点,我们就可以知道了。无论如何谢谢你!