vim如何验证autocmd事件有没有被成功触发
vim支持autocmd命令,我迫切想知道的某一event(例如InsertEnter、TextChanged、TextChangedI)有没有触发成功,最终实验出了下面两种方法。
方法一:使用echo命令
打开vim,输入 :autocmd InsertLeave * echo '123InsertLeave''
,这样当InsertLeave事件被触发时,就会打印出字符串123InsertLeave。
同样的,可以测试其它事件:
autocmd TextChanged * echo '123TextChanged'
autocmd TextChangedI * echo '123TextChangedI'
但是这种方法有一些问题,当在Insert模式下,echo的信息被隐藏了(Insert一直显示在那里)。所以有了第二种验证方法。
方法二:使用set cursorline命令
第二种方法的原理是,当某个事件触发时,我们让cursorline高亮(证明事件被触发了)。
打开vim,输入 :set cursorline
让cursorline先显示出来(重要),
然后输入下面的autocmd命令
:autocmd InsertEnter * hi CursorLine cterm=NONE ctermbg=darkred ctermfg=white
:autocmd InsertLeave * hi CursorLine cterm=NONE ctermbg=NONE ctermfg=NONE
其中:
cterm=NONE 是最终删除光标线下划线的设置;
ctermbg 设置背景色;
ctermfg 设置和文本颜色(要在图形窗口中使用,请添加参数guibg=darkred guifg=white)。
类似的,我们也可以测试 TextChangedI 事件
:autocmd TextChangedI * hi CursorLine cterm=NONE ctermbg=darkred ctermfg=white
:autocmd InsertLeave * hi CursorLine cterm=NONE ctermbg=NONE ctermfg=NONE
(注意:第二行的InsertLeave的事件是为了还原cursorline的颜色)
有了这两个命令,就可以很方便的验证某个autocmd的event有没有被触发,方便调查问题。
转载请注明:牛哥678 » vim如何验证autocmd事件有没有被成功触发