Vim是否有触发器或事件,只要键入命令就会触发?

时间:2017-04-29 05:02:48

标签: events vim eventtrigger

在执行Vim命令时,是否会在Vim中触发某种触发器或事件?

EG。说我执行tabnextNERDTree是否有一些功能可以设置为侦听所需事件并在检测到这些事件时执行某些操作?

1 个答案:

答案 0 :(得分:2)

Vim有一些名为" autocommands" (: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>键(&#34;回车&#34;,&#34;输入&#34;键)按<cr>然后调用函数s:CommandCallback。您可以使用@:魔术变量或使用histget:help histget())检查命令行历史记录中的最后一个命令。然后,您可以检查命令并随意执行任何操作。

编辑:对#34;做任何你喜欢的事情&#34;

如果您希望状态行中显示某些状态消息,则可以使用值let g:command_message = 'Tabnew was called'设置全局变量。然后,您可以使用%{g:command_message}在状态行中呈现它。您需要阅读:help statusline以了解如何将其纳入您的特定状态,但这并不困难。

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