VIM是否有触发器或事件,每当命令命令时会发射



每当执行VIM命令时,VIM中是否有某种触发器或事件?

例如。假设我执行tabnextNERDTree是否可以设置一些功能来侦听所需事件并在检测这些事件时执行某些操作?

vim具有称为"自动命令"(:help autocmd-intro(的东西。这些允许您在事件上执行任意代码,例如保存文件或更改为其他窗口。

不幸的是,据我所知,没有为任何命令执行的自动命令。不过,可能会做一些不同的事情:

cnoremap <silent> <cr> <cr>:call <SID>CommandCallback()<cr>
function! s:CommandCallback()
  let last_command = @:
  if last_command =~ 'tabnew'
    echomsg "Tabnew was called"
  endif
endfunction

此代码以命令行模式按<cr>,然后调用函数s:CommandCallback,以命令行模式覆盖<cr>密钥(" Carriage返回"," Enter"键(。您可以使用@:魔术变量或使用histget(:help histget()(检查命令行历史记录中的最后一个命令。然后,您可以检查命令并使用您喜欢的任何事情。

编辑:对"做任何您喜欢的事情"的详细说明

如果您希望在状态线中可见一些状态消息,则可以设置具有该值的全局变量,例如let g:command_message = 'Tabnew was called'。然后,您可以使用%{g:command_message}将其渲染。您需要阅读:help statusline,以了解如何将其适合您的特定状态线,但这并不困难。

在单独的窗口中打开它会更加棘手,因为您需要打开具有特定设置的刮擦缓冲区,检查是否已经存在,依此类推。这是完全可行的,但是一个很长的话题。我有一个可能会有所帮助的插件,但不确定是否适合:https://github.com/andrewradev/bufferize.vim。您也可以查看此插件:https://github.com/mtth/scratch.vim。您需要进行试验,看看其中任何一个都可以适合您的用例,或者您可以在其源代码中戳戳,并尝试自己学习如何管理窗口(这是一项有用的技能,所以我一定会推荐它:((。

最新更新