验证`~/.vimrc`

Jos*_*nce 4 vim vimrc

我想验证我的~/.vimrc文件是否正确,基本上只需启动vim并立即运行quit. 我几乎可以用 来做到这一点vim -c quit,只是我必须按回车键。例如,

> cat ~/.vimrc
echoerr 'test'

> vim -c quit
Error detected while processing /home/josh/.vimrc:
line    1:
test
Press ENTER or type command to continue
Run Code Online (Sandbox Code Playgroud)

有没有办法在不按回车键的情况下做到这一点?我想我可以直接运行echo | vim -c quit,但我希望有一个更优雅的解决方案。

Olo*_*rin 6

您可以使用 try-catch 块来捕获错误(将转换为异常),并在任何异常时失败:

$ cat vimrc-fail                                                
echoerr 'test'                                 
$ cat vimrc-pass
echo 'test'
$ vim -u NONE -c 'try | source vimrc-pass | catch | cq | endtry | q'; echo $?  
0
$ vim -u NONE -c 'try | source vimrc-fail | catch | cq | endtry | q'; echo $?
1
Run Code Online (Sandbox Code Playgroud)

帮助

:try                            :try :endt :endtry E600 E601 E602
:endt[ry]               Change the error handling for the commands between
                        ":try" and ":endtry" including everything being
                        executed across ":source" commands, function calls,
                        or autocommand invocations.
Run Code Online (Sandbox Code Playgroud)

来自:echoerr

当在 try 条件中使用时,该消息会作为错误异常引发(请参阅try-echoerr)。

其他注意事项:

  • -u NONE 防止采购默认的 vimrcs
  • :cq 使 Vim 返回非零退出状态

要获取最后一条错误消息(现在实际上是一个异常),请使用v:exception

$ vim -u NONE -c 'try | source vimrc-fail | catch | silent exec "!echo " shellescape(v:exception) |cq | endtry | q'; echo $?
Vim(echoerr):test
1
Run Code Online (Sandbox Code Playgroud)