在VIM中添加一键编译和一键运行
轉自:http://blog.chinaunix.net/uid-21202106-id-2406761.html
事先聲明,我使用的VIM完全是基于終端的,而不是gvim或vim-x11。因為后兩者不具有平臺移植性,花哨的目錄和鼠標點擊并非必須。
在vim中編程,退出來再敲命令編譯是一件痛苦的事情。如果能夠像VC那樣一鍵編譯和一鍵運行就爽了。 事實上,在vim中實現這種功能并不困難,所需要的只是在配置文件~/.vimrc中加一些過程,然后將這些過程與某些快捷鍵進行綁定即可。
第一步,寫編譯函數。 事實上,vim的配置腳本完全可以稱得上一門語言,因此定制一些功能是完全沒問題的。
func! CompileGcc() |
這樣就定義兩個函數,分別編譯C和C++,其含義應該是比較明顯的了。注意,這里用到的兩個變量compilecmd和compileflag都是局部變量。search函數用來搜索字符串,我根據源碼的頭文件來判斷編譯所需要的庫。連接兩個字符串的運行符是一個句點。%為內部變量,表示文件名,而%<表示沒有后綴的文件名。
上面的函數只是定義了C/C++語言的編譯,如果需要編譯其它語言,則也需要編寫對應的函數。而把這些不同語言的函數組合到一起則還需要另外一個函數。
第二步,組合成一個函數
func! CompileCode() |
該函數根據文件類別來選定不同的編譯函數。&filetype是一個內部變量,前綴&起標識內部變量的作用。 filetype不光是cpp和c,還可以是python,java等等。
第三步,鍵綁定
map <F5> :call CompileCode()<CR> |
這里綁定了三次,分別對應普通模式,插入模式和可視模式。顯然起到的作用是從這些模式中退出來,而表示carriage return,即敲命令時的回車。
現在,大功告成了,你只需要按F5鍵,源碼就會自動保存,然后進行編譯。運行可執行文件做法也是一樣的。 下面貼出我的完整的解決方案,除了C/C++,還涉及到java和python。并且按F6就能執行編譯生成的可執行文件。
func! CompileGcc()
????exec "w"
????let compilecmd="!gcc "
????let compileflag="-o %< "
????if search("mpi\.h") != 0
????????let compilecmd = "!mpicc "
????endif
????if search("glut\.h") != 0
????????let compileflag .= " -lglut -lGLU -lGL "
????endif
????if search("cv\.h") != 0
????????let compileflag .= " -lcv -lhighgui -lcvaux "
????endif
????if search("omp\.h") != 0
????????let compileflag .= " -fopenmp "
????endif
????if search("math\.h") != 0
????????let compileflag .= " -lm "
????endif
????exec compilecmd." % ".compileflag
endfunc
func! CompileGpp()
????exec "w"
????let compilecmd="!g++ "
????let compileflag="-o %< "
????if search("mpi\.h") != 0
????????let compilecmd = "!mpic++ "
????endif
????if search("glut\.h") != 0
????????let compileflag .= " -lglut -lGLU -lGL "
????endif
????if search("cv\.h") != 0
????????let compileflag .= " -lcv -lhighgui -lcvaux "
????endif
????if search("omp\.h") != 0
????????let compileflag .= " -fopenmp "
????endif
????if search("math\.h") != 0
????????let compileflag .= " -lm "
????endif
????exec compilecmd." % ".compileflag
endfunc
func! RunPython()
????????exec "!python %"
endfunc
func! CompileJava()
????exec "!javac %"
endfunc
func! CompileCode()
????????exec "w"
????????if &filetype == "cpp"
????????????????exec "call CompileGpp()"
????????elseif &filetype == "c"
????????????????exec "call CompileGcc()"
????????elseif &filetype == "python"
????????????????exec "call RunPython()"
????????elseif &filetype == "java"
????????????????exec "call CompileJava()"
????????endif
endfunc
func! RunResult()
????????exec "w"
????????if search("mpi\.h") != 0
????????????exec "!mpirun -np 4 ./%<"
????????elseif &filetype == "cpp"
????????????exec "! ./%<"
????????elseif &filetype == "c"
????????????exec "! ./%<"
????????elseif &filetype == "python"
????????????exec "call RunPython"
????????elseif &filetype == "java"
????????????exec "!java %<"
????????endif
endfunc
map <F5> :call CompileCode()<CR>
imap <F5> <ESC>:call CompileCode()<CR>
vmap <F5> <ESC>:call CompileCode()<CR>
map <F6> :call RunResult()<CR>
總結
以上是生活随笔為你收集整理的在VIM中添加一键编译和一键运行的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: plc通讯的握手信号_基于Modbus协
- 下一篇: idea替换区分大小写