我的 中有此行.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