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

时间:2013-12-06 08:14:25

标签: vim

我希望vim在保存.cpp文件后运行g ++来编译它。我怎样才能做到这一点?我知道如何将外部命令映射到键,但我想知道如何将命令映射到另一个命令。

2 个答案:

答案 0 :(得分:1)

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

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

aug AutoCompileCppFiles
    au!
    au BufWritePost *.cpp,*.c make 
aug END 
BTW,:make将完成工作,因为它会在大多数系统上调用gnumake,而gnumake已经知道如何编译单个隔离文件。如果要对编译进行参数化,只需设置$ LDFLAGS和$ CXXFLAGS; e.g:

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

答案 1 :(得分:1)

您使用:autocmd。在:write之后,BufWritePost事件被触发。请参阅:h autocmd-events了解可用的内容。

:autocmd BufWritePost <buffer> !g++ %

%表示当前文件(已写入)。

更好的选择可能是调用:make;这也可以处理多个单个文件编译。

要为所有 C ++文件安装该文件,您只需将<buffer>替换为*.cpp,但是您将复制文件类型检测内置于Vim。最好将上述:autocmd放入例如~/.vim/ftplugin/cpp_autocompile.vim:filetype plugin on。 (这需要您:autocmd FileType cpp autocmd BufWritePost...。或者,您可以直接在~/.vimrc中定义{{1}},但是一旦您进行了多次自定义,这往往会变得难以处理。