我在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 :bar
execute "!./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
是否存在任何错误的信息。
注意:应该对BufWritePost
autocmd 上的该文件模式更具体,以免建立不相关的文件。
这仅使用了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编译事物是一个更好的主意。