如何避免Vim错误信息“不是编辑器命令”

4

假设我在我的 .vimrc 文件中有以下内容:

au bufenter * RainbowParenthesesToggle

然而我正在一台不熟悉的机器上工作,还没有安装所有插件。这意味着当我启动Vim时,会出现以下错误信息:

E492: Not an editor command: RainbowParenthesesToggle

我应该如何防范这种情况?或者,我需要用什么条件语句来包装这些调用,以避免在启动Vim时收到此错误消息?

2个回答

7

抑制

最简单的方法是通过: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中是一个不错的位置。


另外,如果我使用Pathogen,那么建议3-首先获取插件的方法会有什么变化? - Kevin Burke
1
这代表“精确匹配”,请参阅:help exists() - Ingo Karkat
Pathogen扩展了“runtimepath”,而“:runtime”使用它。只要Pathogen的内容首先出现,就应该能够正常工作。 - Ingo Karkat
当我在这里复制代码::au bufenter * if exists(':RainbowParenthesesToggle') == 2 | RainbowParenthesesToggle | endif,我会得到一个错误信息 Trailing characters: RainbowParenthesesToggle | endif - Kevin Burke
哦,该命令不能直接放入命令序列中。请使用exe 'RainbowParenthesesToggle'代替RainbowParenthesesToggle - Ingo Karkat

1
您可以使用exists()函数来检查命令是否存在:
au bufenter * if exists(":RainbowParenthesesToggle") | RainbowParenthesesToggle | endif

我自己没有定义这样的命令,所以我无法验证它是否有效。:)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接