Vim lint 检查 - 仅在出现错误时显示消息

Vim lint 检查 - 仅在出现错误时显示消息

我的 中有此行.vimrc​​,意思是“当我保存 .rb 文件时,运行它ruby -c”(ruby 解释器的错误检查)。

autocmd BufWritePost *.rb !ruby -c <afile>

当我保存该文件时,我总是在屏幕底部看到输出,所以我习惯了它并开始忽略它。我想要的是仅在出现错误时才看到输出。

我可以看到,当出现错误时,在显示错误内容之后,底部会显示“shell 返回 1”。

我该如何修改此行,以便仅在 shell 返回 1 时才显示消息?有没有办法有条件地抑制在 vim 中运行的 shell 命令的输出?

答案1

你一定要看看Syntastic 插件。它会在保存时自动检查当前缓冲区中文件的语法,支持多种文件类型(ruby、python、php 等),并且完全按照您的需要执行 - 仅在出现错误时显示输出。

答案2

当 Vim 看到命令的退出状态时,该命令已经将其输出(如果有)发送到终端,因此您无法通过测试退出状态有条件地抑制命令的输出。

ruby(1) 手册页指出,-c如果没有错误,这会导致 ruby​​ 将消息“语法正常”发送到标准输出。通过测试发现语法错误会报告到标准错误。因此,您可以通过将标准输出重定向到 /dev/null 来抑制“语法正常”消息,并使用 来抑制命令的回显:silent,如下所示。

autocmd BufWritePost *.rb silent! !ruby -c <afile> > /dev/null

相关内容