假设我在我的 .vimrc 文件中有以下内容:
au bufenter * RainbowParenthesesToggle
然而我正在一台不熟悉的机器上工作,还没有安装所有插件。这意味着当我启动Vim时,会出现以下错误信息:
E492: Not an editor command: RainbowParenthesesToggle
我应该如何防范这种情况?或者,我需要用什么条件语句来包装这些调用,以避免在启动Vim时收到此错误消息?
假设我在我的 .vimrc 文件中有以下内容:
au bufenter * RainbowParenthesesToggle
然而我正在一台不熟悉的机器上工作,还没有安装所有插件。这意味着当我启动Vim时,会出现以下错误信息:
E492: Not an editor command: RainbowParenthesesToggle
我应该如何防范这种情况?或者,我需要用什么条件语句来包装这些调用,以避免在启动Vim时收到此错误消息?
最简单的方法是通过:silent!
(注意!
)来抑制错误消息:
:au bufenter * silent! RainbowParenthesesToggle
为了更加干净(特别是对于在每个BufEnter
上运行的autocmd),避免调用。可以使用exists(':RainbowParenthesesToggle') == 2
来检查命令是否存在。
:au bufenter * if exists(':RainbowParenthesesToggle') == 2 | RainbowParenthesesToggle | endif
最好只检查一次,并且完全避免定义autocmd。问题在于你的~/.vimrc
在插件之前被加载!有两种方法可以解决这个问题:
1)在检查之前明确地加载插件:
runtime! plugin/rainbowparentheses.vim
if exists(':RainbowParenthesesToggle') == 2
au bufenter * RainbowParenthesesToggle
endif
2) 将定义和条件移动到插件之后的位置。在~/.vim/after/plugin/rainbowparentheses.vim
中是一个不错的位置。
exists()
函数来检查命令是否存在:au bufenter * if exists(":RainbowParenthesesToggle") | RainbowParenthesesToggle | endif
我自己没有定义这样的命令,所以我无法验证它是否有效。:)
:help exists()
。 - Ingo Karkat:au bufenter * if exists(':RainbowParenthesesToggle') == 2 | RainbowParenthesesToggle | endif
,我会得到一个错误信息Trailing characters: RainbowParenthesesToggle | endif
。 - Kevin Burkeexe 'RainbowParenthesesToggle'
代替RainbowParenthesesToggle
。 - Ingo Karkat