禁止vim自动命令的输出


13

我在vimrc中定义了一个自动命令:

au BufWritePost * !./make.sh

该脚本make.sh.tex文件编译3次,我不希望显示输出。

有没有办法抑制输出?

我试图silentau命令前添加一行,但是没有用。我也尝试过这种方法,但没有成功。

Answers:


20

沉默应该走之前!./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

第二个命令起作用了,尽管它仍然在屏幕上打印输出。另外,当脚本结束时,我不需要按Enter键,这很好。但是我想知道是否有任何方法可以完全抑制输出。
安德烈·赫尔曼·贝塞拉

1
是否execute "!./make.sh"需要execute "!./make.sh >/dev/null 2>&1"帮助?这会将命令的所有输出重定向到/dev/null。阅读tldp.org/LDP/abs/html/io-redirection.html,以获取有关bash中重定向的更多信息。
EvergreenTree

我应该想到这一点!有用。谢谢!
安德烈·赫尔曼·贝塞拉

7

您直接问题的答案就像@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来说服。当然,有些插件和工具可能会为您提供帮助

  • Dispatch.vim可用于:make异步运行作业。
  • 后缀插件语法检查文件:write
  • Ale.vim(异步棉绒引擎)是一个插件,用于在您编辑文本文件时在NeoVim和Vim 8中提供棉绒。
  • Unimpaired.vim使管理快速修复列表变得容易。
  • 普通的旧Makefile。除非您./script.sh非常复杂,否则您可能要考虑使用make。它可以在以后扩展以执行更多任务,并且是常用的构建工具。
  • 您可以使用Vim Awesome搜索可能有用的更多插件。

结论

我个人: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编译事物是一个更好的主意。
EvergreenTree

如何将autocmd更改为仅在特定文件上运行makeprg。
伊本·
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.