如何在autocmd中不展开?

时间:2020-06-15 03:29:33

标签: vim

我有以下autocmd在vim中定义log的缩写:

autocmd FileType vim,filetype_vim     iabbrev <buffer> log 
\ call LogOutput('', "DEBUG", {'line': expand('<sflnum>'), 'func': expand('<sfile>')[9:]})

当我输入log时,我希望它准确输入:

call LogOutput('', "DEBUG", {'line': expand('<sflnum>'), 'func': expand('<sfile>')[9:]})

这被发送到日志功能,因此<sflnum><sfile>由进行日志调用的位置确定。

但是,当我在vim中输入log [space]时,其输出如下:

call LogOutput('', "DEBUG", {'line': expand('<sflnum>'), 'func': expand('/Users/david/.vim/vimrc')[9:]})

因此,似乎展开sflnum(这是我想要的,但是确实展开了sfile。如何我做到了,这样abbrev / autocmd永远不会扩展它?

1 个答案:

答案 0 :(得分:1)

来自:h :autocmd

请注意,“:autocmd”中的特殊字符(例如“%”,“”) 定义自动命令时,不会扩展参数。这些将是 在识别到事件并执行{cmd}时展开。唯一的 例外是定义autocmd时会展开“ <sfile>”。

要停止不必要的扩展,请使用<lt>,例如"\<lt>sfile>"