参考:http://www.cnblogs.com/ma6174/archive/2011/12/10/2283393.html
以及vim帮助文档
用这段代码可以实现f5编译
"C,C++ 按F5编译运行
map <F5> :call CompileRunGcc()<CR>
func! CompileRunGcc()
exec "w"
if &filetype == 'c'
exec "!g++ % -o %<"
exec "! ./%<"
elseif &filetype == 'cpp'
exec "!g++ % -o %<"
exec "! ./%<"
elseif &filetype == 'java'
exec "!javac %"
exec "!java %<"
elseif &filetype == 'sh'
:!./%
endif
endfunc
但是实际使用中会出现一个问题,就是编译JAVA的时候,会告诉找不到类。
在vim中使用命令:pwd查看当前工作目录,发现当前目录是在用户目录下而不是工作目录。也就是说,首先得进入了当前工作目录才能使用这个脚本。
vim中可以使用“%”代表当前文件路径,以及使用一些参数提取需要的内容
下面内容来自vim帮助文档
Examples, when the file name is "src/version.c", current dir
"/home/mool/vim": >
:p /home/mool/vim/src/version.c
:p:. src/version.c
:p:~ ~/vim/src/version.c
:h src
:p:h /home/mool/vim/src
:p:h:h /home/mool/vim
:t version.c
:p:t version.c
:r src/version
:p:r /home/mool/vim/src/version
:t:r version
:e c
:s?version?main? src/main.c
:s?version?main?:p /home/mool/vim/src/main.c
:p:gs?/?\\? \home\mool\vim\src\version.c
Examples, when the file name is "src/version.c.gz": >
:p /home/mool/vim/src/version.c.gz
:e gz
:e:e c.gz
:e:e:e c.gz
:e:e:r c
:r src/version.c
:r:e c
:r:r src/version
:r:r:r src/version
所以,可以用
:cd %:p:h
进入当前工作目录。注意vim中使用“:!”可以使用命令行命令,但是如果cd前面加了!就会发现编译的时候路径被重置了。不要加!才可以更改工作目录。
将下面代码加入.vimrc就可以实现f5编译了
map <F5> :call CompileRunGcc()<CR>
imap <F5> <ESC>:call CompileRunGcc()<CR>
func! CompileRunGcc()
exec "w"
exec "cd %:p:h"
if &filetype == 'c'
exec "!g++ % -o %<"
exec "! ./%<"
elseif &filetype == 'cpp'
exec "!g++ % -o %<"
exec "! ./%<"
elseif &filetype == 'java'
exec "!javac %"
exec "!java %<"
elseif &filetype == 'sh'
:!./%
endif
endfunc
map只是单纯的映射,如果在插入模式下按F5就会变成在文档中插入F5而不执行函数。所以使用下面一行imap表示插入模式下的映射