我在vimrc中定义了一个自动命令: >
是否有抑制输出的方法?

我试图在make.sh命令之前添加.tex,但是没有用。我也尝试过这种方法,但没有成功。

#1 楼

沉默应该在!./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会尝试解释!之后的所有字符。错误消息,而:silent!没有。同样,:silent部分将>/dev/null 2>&1的所有输出重定向到!./make.sh。您可以在此处通过bash阅读有关i / o重定向的更多信息。

相关帮助主题


/dev/null
:help :execute
:help :silent
:help :!


评论


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

–安德烈·赫尔曼·贝塞拉(Andre Herman Bezerra)
15年4月24日在19:44

用执行“!./ make.sh> / dev / null 2>&1”代替执行“!./ make.sh”有帮助吗?这会将命令的所有输出重定向到/ dev / null。阅读tldp.org/LDP/abs/html/io-redirection.html,以获取有关bash中重定向的更多信息。

–EvergreenTree
15年4月24日在19:56

我应该想到这一点!有用。谢谢!

–安德烈·赫尔曼·贝塞拉(Andre Herman Bezerra)
15年4月24日在19:59

#2 楼

您直接问题的答案就像@EvergreenTree发布的一样。但是我觉得您缺少一些用于构建/编译/整理项目的Vim内置工具。最显着的是:make和快速修复列表。

使用:make可以为我们带来什么?使用快速修复程序,您可以在文件中的错误之间导航,因此您可以直接跳至编译器指出错误的位置(很方便吗?)。

:make

运行:make将执行make程序:make。然后使用'makeprg'解析输出,并将每个条目放入快速修复列表中。但是,您可以通过'errorformat'命令更改'makeprg'或直接进行设置。

还可以将其他参数传递给make。例如Makefile

注意:运行'makeprg'通常会在屏幕底部显示命令的输出,并提示要求按Enter。只需按Enter键,所有输出将在快速修复列表中可用。您可以通过:compiler来禁止这种情况,例如:make

静音制作的常见自定义命令是: :make clean您的快速修复程序列表将保存编译器的输出。

使用以下命令导航快速修复程序列表。




打开快速修复程序。窗口

:make关闭快速修复窗口

:silent / :silent make移至下一个/上一个项目

:make在底部打印当前错误或:copen在此示例中显示特定错误3

我个人使用Tim Pope的无损插件浏览快速修复列表。

如何自动且无提示地运行:cclose

您可以像在哪里一样使用:cnext来执行此操作。 />
注意:应该更详细地说明:cprev autocmd上的文件模式,以免建立不相关的文件。

还有更多吗? />这仅使用了Vim的一些内置命令以及几个autocmd来说服。当然,有些插件和工具可能对您有帮助



Dispatch.vim可用于异步运行:cc作业。

同步插件语法在:cc 3之后检查文件。

Ale.vim(异步棉绒引擎)是一个用于在编辑文本文件时在NeoVim和Vim 8中提供棉绒的插件。使管理快速修复程序列表变得容易。
使用旧的Makefile。除非您的:make非常复杂,否则您可能要考虑使用make。它以后可以扩展以执行更多任务,并且是常用的构建工具。
您可以使用Vim Awesome搜索更多可能有用的插件。我将:autocmd和quickfix集成到我自己的工作流程中。我相信捕获构建过程的输出并捕获错误非常值得投资。作为额外的好处,您可能会更熟悉quickfix列表,并且可以将该列表用于其他应用程序,例如:cwindow。 >

评论


我在回答这个问题时曾想过:make,但没有包括在内。使用makefore编译事物是一个更好的主意。

–EvergreenTree
2015年4月25日,0:21

如何将autocmd更改为仅在特定文件上运行makeprg。

–伊本·赛义德(Ibn Saeed)
17年5月18日下午4:31