我在vimrc中定义了一个自动命令:
au BufWritePost * !./make.sh
该脚本make.sh将.tex文件编译3次,我不希望显示输出。
有没有办法抑制输出?
我试图silent在au命令前添加一行,但是没有用。我也尝试过这种方法,但没有成功。
我在vimrc中定义了一个自动命令:
au BufWritePost * !./make.sh
该脚本make.sh将.tex文件编译3次,我不希望显示输出。
有没有办法抑制输出?
我试图silent在au命令前添加一行,但是没有用。我也尝试过这种方法,但没有成功。
Answers:
沉默应该走之前!./make.sh,而不是之前au。放在silent前面au只是意味着它将静默注册自动命令。它应该看起来像这样:
au BufWritePost * silent! !./make.sh
使用此命令运行外部命令的一个问题:silent是屏幕不会重绘,从而使您处于空白屏幕。但是,vim确实有一个重绘屏幕的命令,可以这样使用:
au BufWritePost * silent! execute "!./make.sh >/dev/null 2>&1" | redraw!
我需要使用execute命令的原因是因为该:!命令使用了其后找到的所有字符,这意味着我不能仅仅silent! !./make.sh | redraw!因为bash会尝试解释after之后的所有字符!。
请注意,它会:silent!忽略错误消息,而:silent不会忽略。此外,该>/dev/null 2>&1部件还将的所有输出重定向!./make.sh到/dev/null。你可以阅读更多关于I / O重定向在bash 这里。
:help :execute:help :silent:help :!:help :barexecute "!./make.sh"需要execute "!./make.sh >/dev/null 2>&1"帮助?这会将命令的所有输出重定向到/dev/null。阅读tldp.org/LDP/abs/html/io-redirection.html,以获取有关bash中重定向的更多信息。
您直接问题的答案就像@EvergreenTree发布的一样。但是我觉得您缺少一些用于构建/编译/整理项目的Vim内置工具。最值得注意的:make是快速修复列表。
:make能给我们带来什么?使用:make使您可以将错误收集到称为快速修复列表的列表中。使用快速修复程序,您可以在文件中的错误之间导航,因此您可以直接跳至编译器指出错误的位置(方便吗?)。
运行:make将执行make程序'makeprg'。然后使用解析输出,'errorformat'并将每个条目放入quickfix列表中。
通常'makeprg'默认为make运行的命令Makefile。但是,您可以'makeprg'通过:compiler命令更改或直接设置它。
您还可以将额外的参数传递给:make。例如:make clean
注意:运行:make通常会在屏幕底部显示命令的输出,并提示要求按Enter。只需按Enter,所有输出将在quickfix列表中可用。您可以抑制这种通过:silent,例如:silent make。
静默命令的常见定制命令是:
command -nargs=* -bar Smake silent make <args> <bar> cwindow
运行完后,您:make的quickfix列表将保存编译器的输出。
使用以下命令浏览快速修复列表。
:copen 打开快速修复窗口:cclose 关闭快速修复窗口:cnext/ :cprev移至下一个/上一个项目:cc:cc 3在此示例中在底部打印出当前错误或显示特定错误3我个人使用蒂姆教皇的未受损伤的插件浏览quickfix列表。
:make自动和静默运行如何?您可以在一个:autocmd与您一样的地方进行此操作。
augroup auto_make
autocmd!
autocmd BufWritePost * silent make
autocmd QuickFixCmdPost *make* cwindow
augroup END
作为奖励,我在打开quickfix窗口时添加了:cwindow是否存在任何错误的信息。
注意:应该对BufWritePostautocmd 上的该文件模式更具体,以免建立不相关的文件。
这仅使用了Vim的一些内置命令以及一些autocmd来说服。当然,有些插件和工具可能会为您提供帮助
:make异步运行作业。:write。./script.sh非常复杂,否则您可能要考虑使用make。它可以在以后扩展以执行更多任务,并且是常用的构建工具。我个人:make将Quickfix和Quickfix 集成到自己的工作流程中。我相信捕获构建过程的输出并捕获错误非常值得投资。另外,您可能会更熟悉quickfix列表,并且可以将列表用于其他应用程序,例如:grep。
有关更多帮助,请参见:
:h :make
:h quickfix
:h 'makeprg'
:h 'errorformat'
:h :compiler
:h :copen
:h :cwindow
:h :cnext
:h :cc
:make在回答这个问题时曾想过,但没有包括在内。使用makefore编译事物是一个更好的主意。