參考: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' :!./% endifendfunc
但是實際使用中會出現一個問題,就是編譯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.cExamples, 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' :!./% endifendfunc
map只是單純的映射,如果在插入模式下按F5就會變成在文檔中插入F5而不執行函數。所以使用下面一行imap表示插入模式下的映射