如何在保存文件后自动运行命令

3

我希望在保存.cpp文件后,vim可以运行g++进行编译。我该如何实现这个功能?我知道如何将外部命令映射到键上,但我想知道如何将一个命令映射到另一个命令。

2个回答

3
您可以使用:autocmd实现此功能。在执行:write命令后,会触发BufWritePost事件。详情请参见:h autocmd-events
:autocmd BufWritePost <buffer> !g++ %

符号%代表当前正在编辑的文件。

一个更好的选择可能是调用:make命令,这个命令可以处理多于一个文件的编译。

要将此功能安装为所有C++文件的默认设置,你可以将<buffer>替换为*.cpp,但这样会重复内置在Vim中的文件类型检测。最好将上述的:autocmd放入例如~/.vim/ftplugin/cpp_autocompile.vim中。(这需要开启:filetype plugin on)。或者,你可以直接在~/.vimrc中定义一个:autocmd FileType cpp autocmd BufWritePost...,但一旦你有很多自定义内容,这种方法就变得非常笨拙。


2

我不建议这样做。大多数情况下,我们保存的文件都不能完全编译(因为我们想要更新标签数据库,在回家之前确保文件已保存)。此外,大多数项目都不是由单个文件组成的。

但无论如何,您正在寻找 BufWritePost 自动命令。例如,

aug AutoCompileCppFiles
    au!
    au BufWritePost *.cpp,*.c make 
aug END 

顺便说一句,:make 会调用大多数系统上的 GNU make,而 GNU make 已经知道如何编译单个孤立的文件。如果您想参数化编译,请设置 $LDFLAGS 和 $CXXFLAGS;例如:

:let $CXXFLAGS='-std=c++0x -Wall -pedantic'

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