我希望在保存.cpp
文件后,vim可以运行g++进行编译。我该如何实现这个功能?我知道如何将外部命令映射到键上,但我想知道如何将一个命令映射到另一个命令。
我希望在保存.cpp
文件后,vim可以运行g++进行编译。我该如何实现这个功能?我知道如何将外部命令映射到键上,但我想知道如何将一个命令映射到另一个命令。
: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...
,但一旦你有很多自定义内容,这种方法就变得非常笨拙。
我不建议这样做。大多数情况下,我们保存的文件都不能完全编译(因为我们想要更新标签数据库,在回家之前确保文件已保存)。此外,大多数项目都不是由单个文件组成的。
但无论如何,您正在寻找 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'