如何在保存Vim文件后自动执行shell命令?

87

我希望能在每次保存文件后自动运行测试。

我尝试使用autocmdBufWritePost,但无法使其工作。

2个回答

113

每当文件保存时,此命令将运行run_tests.sh,并将当前文件名作为唯一参数传递:

:autocmd BufWritePost * !run_tests.sh <afile>

使用以下命令查看自动命令:

:autocmd BufWritePost *

使用以下代码从前一个命令中删除所有自动命令:

:autocmd! BufWritePost *

3
有没有办法实现这样的功能:如果当前目录或上一级目录中存在名为tests.html的文件,则运行命令testprog tests.html,否则执行cd ..并运行testprog tests.html命令? - Running Turtle
3
我会创建一个函数,并在自动命令中使用它。使用 filereadable() 测试文件是否存在,然后根据情况采取行动。 - blueyed
这个可以运行,但是如果你想传递文件的完整路径,怎么办呢?有可能吗? https://dev59.com/zazla4cB1Zd3GeqPCMrO - Maciej Krawczyk
1
如何在后台静默地执行此操作,以便您不会得到输出? - botenvouwer
3
尝试使用“:autocmd BufWritePost * silent!run_tests.sh <afile>”命令。输出仍将写入控制台,但Vim将不会等待您确认。如果需要,向特定命令发送“quiet”/“silent”选项或添加“>/dev/null”以将其输出黑洞化。 - tremby
5
并且在保存之前,它是BufWritePre - andorov

1
将以下内容添加到你的.vimrc文件中:
(以raml2html doc/api.raml > public/api_doc.html命令为例)
autocmd BufWritePost,FileWritePost *.raml silent! !raml2html doc/api.raml > public/api_doc.html

注意:

  • silent! 命令将会隐藏所有输出
  • :silent 如果您使用的是 vim7.3-,使用 silent! 如果您使用的是vim7.3+
  • 需要退出并重新启动vim,使 .vimrc 文件生效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接