日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

在VIM中添加一键编译和一键运行

發(fā)布時(shí)間:2024/1/1 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在VIM中添加一键编译和一键运行 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)自:http://blog.chinaunix.net/uid-21202106-id-2406761.html

事先聲明,我使用的VIM完全是基于終端的,而不是gvim或vim-x11。因?yàn)楹髢烧卟痪哂衅脚_(tái)移植性,花哨的目錄和鼠標(biāo)點(diǎn)擊并非必須。


在vim中編程,退出來再敲命令編譯是一件痛苦的事情。如果能夠像VC那樣一鍵編譯和一鍵運(yùn)行就爽了。 事實(shí)上,在vim中實(shí)現(xiàn)這種功能并不困難,所需要的只是在配置文件~/.vimrc中加一些過程,然后將這些過程與某些快捷鍵進(jìn)行綁定即可。
第一步,寫編譯函數(shù)。 事實(shí)上,vim的配置腳本完全可以稱得上一門語言,因此定制一些功能是完全沒問題的。

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


這樣就定義兩個(gè)函數(shù),分別編譯C和C++,其含義應(yīng)該是比較明顯的了。注意,這里用到的兩個(gè)變量compilecmd和compileflag都是局部變量。search函數(shù)用來搜索字符串,我根據(jù)源碼的頭文件來判斷編譯所需要的庫。連接兩個(gè)字符串的運(yùn)行符是一個(gè)句點(diǎn)。%為內(nèi)部變量,表示文件名,而%<表示沒有后綴的文件名。
上面的函數(shù)只是定義了C/C++語言的編譯,如果需要編譯其它語言,則也需要編寫對(duì)應(yīng)的函數(shù)。而把這些不同語言的函數(shù)組合到一起則還需要另外一個(gè)函數(shù)。
第二步,組合成一個(gè)函數(shù)

func! CompileCode()
????????exec "w"
????????if &filetype == "cpp"
????????????????exec "call CompileGpp()"
????????elseif &filetype == "c"
????????????????exec "call CompileGcc()"
????????endif
endfunc


該函數(shù)根據(jù)文件類別來選定不同的編譯函數(shù)。&filetype是一個(gè)內(nèi)部變量,前綴&起標(biāo)識(shí)內(nèi)部變量的作用。 filetype不光是cpp和c,還可以是python,java等等。
第三步,鍵綁定

map <F5> :call CompileCode()<CR>
imap <F5> <ESC>:call CompileCode()<CR>
vmap <F5> <ESC>:call CompileCode()<CR>


這里綁定了三次,分別對(duì)應(yīng)普通模式,插入模式和可視模式。顯然起到的作用是從這些模式中退出來,而表示carriage return,即敲命令時(shí)的回車。
現(xiàn)在,大功告成了,你只需要按F5鍵,源碼就會(huì)自動(dòng)保存,然后進(jìn)行編譯。運(yùn)行可執(zhí)行文件做法也是一樣的。 下面貼出我的完整的解決方案,除了C/C++,還涉及到j(luò)ava和python。并且按F6就能執(zhí)行編譯生成的可執(zhí)行文件。

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>

總結(jié)

以上是生活随笔為你收集整理的在VIM中添加一键编译和一键运行的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。