版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
手把手教你把Vim改裝成一個(gè)IDE編程環(huán)境(圖文)(完整版)實(shí)用資料(可以直接使用,可編輯完整版實(shí)用資料,歡迎下載)
手把手教你把Vim改裝成一個(gè)IDE編程環(huán)境(圖文)手把手教你把Vim改裝成一個(gè)IDE編程環(huán)境(圖文)(完整版)實(shí)用資料(可以直接使用,可編輯完整版實(shí)用資料,歡迎下載)By:吳垠Date:2007-09-07Version:0.5Email:lazy.fox.wu#gmailHomepage:Copyright:該文章版權(quán)由吳垠和他可愛(ài)的老婆小包子所有??稍诜巧虡I(yè)目的下任意傳播和復(fù)制。對(duì)于商業(yè)目的下對(duì)本文的任何行為需經(jīng)作者同意。
聯(lián)系方式:lazy.fox.wu#gmail1寫(xiě)在前面Linux下編程一直被詬病的一點(diǎn)是:沒(méi)有一個(gè)好用的IDE,但是聽(tīng)說(shuō)Linux牛人,黑客之類(lèi)的也都不用IDE.但是對(duì)我等從Windows平臺(tái)轉(zhuǎn)移過(guò)來(lái)的Coder來(lái)說(shuō),一個(gè)好用的IDE是何等的重要啊,估計(jì)很多人就是卡在這個(gè)門(mén)檻上了,"工欲善其事,必先利其器"嘛,我想如果有一個(gè)很好用的IDE,那些Linux牛人也會(huì)歡迎的.這都是勞動(dòng)人民的美好愿望罷了,我今天教大家把gvim改裝成一個(gè)簡(jiǎn)易IDE,說(shuō)它"簡(jiǎn)易"是界面上看起來(lái)"簡(jiǎn)易",但功能絕對(duì)不比一個(gè)好的IDE差,該有的功能都有,不該有的功能也有,你就自己沒(méi)事偷著樂(lè)吧,下面我開(kāi)始介紹今天的工作了.
本文會(huì)教你:
1.
中文幫助手冊(cè)的安裝
2.
vim編程常用命令
3.
語(yǔ)法高亮
4.
在程序中跳來(lái)跳去:Ctags的使用
5.
教你高效地瀏覽源碼--插件:TagList
6.
文件瀏覽器和窗口管理器--插件:WinManager
7.
Cscope的使用
8.
QuickFix窗口
9.
快速瀏覽和操作Buffer--插件:MiniBufExplorer
10.
c/h文件間相互切換--插件:A
11.在工程中查找--插件:Grep
12.高亮的書(shū)簽--插件:VisualMark
13.自動(dòng)補(bǔ)全
14.加速你的補(bǔ)全--插件:SuperTab
本文不會(huì)教你:
1.
如何使用vim.本文不會(huì)從零開(kāi)始教你如何使用vim,如果你是第一次接觸vim,
建議你先看看其他的vim入門(mén)的教程,或者在shell下輸入命令:vimtutor,
這是一個(gè)簡(jiǎn)單的入門(mén)教程.
2.
編程技巧.
3.
vim腳本的編寫(xiě).
我的工作環(huán)境是:FedoraCore5
gvim是自己編譯的7.0,如果你還沒(méi)有安裝gvim,請(qǐng)看我的這篇文章<在RedhatLinux9中編譯和配置gvim7.0>
由于本人一直從事C語(yǔ)言工作,所以下面這些例子都是在C語(yǔ)言程序中演示的,其他語(yǔ)言的沒(méi)有試過(guò),如果有朋友在別的語(yǔ)言下有問(wèn)題,可以跟我討論一些,我會(huì)盡量幫助你們的.
本文用的示范源碼是vim7.1的源碼,可以在下載到源碼包:vim-7.1.tar.bz2,你也可以不用下載,就用你自己程序的源碼,關(guān)系不大的.我把源碼解壓在我的home目錄下:~/vim71
下面對(duì)文中的一些名字定義一下:
1.文中用到的一些用<>括起來(lái)的符號(hào)比如<C-T>,<C-S-A>,之類(lèi)的,你可以用下面的命令看看解釋::helpkeycodes2.文中說(shuō)的一些路徑,比如:
~/.vim/plugin
~/.vim/doc
~/.vim/syntax
如果你沒(méi)有,就自己創(chuàng)建.
3.文中說(shuō)到的.vimrc文件都是指~/.vimrc
先給大家看張圖片,我是vim的界面,解解饞先^_^
(圖1)
對(duì)照上圖的圖標(biāo),我在本文中將教會(huì)你以下這些功能:1簡(jiǎn)潔明了的Buffer瀏覽和操作2文件瀏覽器3tag瀏覽器4高亮的書(shū)簽5更豐富的語(yǔ)法高亮6成員變量的下拉,自動(dòng)補(bǔ)全2中文幫助手冊(cè)的安裝vim自帶的幫助手冊(cè)是英文的,對(duì)平時(shí)編程的人來(lái)說(shuō)沒(méi)有多大閱讀困難,何況還有"星級(jí)譯王"呢,可偏偏有一幫人將其翻譯成了中文,可偏偏我又擋不住誘惑將它安裝了,唉又痛失一個(gè)學(xué)習(xí)英文的好機(jī)會(huì),下不為例.
大家看看我的中文幫助界面吧:
(圖2)
安裝方法:
在下面的網(wǎng)站下載中文幫助的文件包:
://
(English)
://
(中文)
下載的文件包應(yīng)該是類(lèi)似這樣的:vimcdoc-1.5.0.tar.gz
解壓后其中有個(gè)doc文件夾,將其中的內(nèi)容全部復(fù)制到~/.vim/doc,或者vim安裝目錄下的doc目錄中,此時(shí)vim中的help信息已經(jīng)是中文的了.
注意:
a.如果無(wú)法顯示中文,在~/.vimrc中增加下面這句試試:
sethelplang=cn
b.幫助文件的文本是utf-8編碼的,如果想用vim直接查看,需要在~/.vimrc中設(shè)置:
setencoding=utf-83vim編程常用命令建議先看看幫助手冊(cè)中的下面章節(jié),其中有關(guān)tags文件的部分你可以先跳過(guò),在后面的章節(jié)中會(huì)講到,到時(shí)候你在回來(lái)看看,就覺(jué)得很簡(jiǎn)單了::helpusr_29
:helpusr_30下面是我常用的一些命令,放在這里供我備忘:%跳轉(zhuǎn)到配對(duì)的括號(hào)去[[跳轉(zhuǎn)到代碼塊的開(kāi)頭去(但要求代碼塊中'{'必須單獨(dú)占一行)gD跳轉(zhuǎn)到局部變量的定義處''跳轉(zhuǎn)到光標(biāo)上次停靠的地方,是兩個(gè)',而不是一個(gè)"mx設(shè)置書(shū)簽,x只能是a-z的26個(gè)字母`x跳轉(zhuǎn)到書(shū)簽處("`"是1左邊的鍵)>增加縮進(jìn),"x>"表示增加以下x行的縮進(jìn)<減少縮進(jìn),"x<"表示減少以下x行的縮進(jìn)
4語(yǔ)法高亮寫(xiě)程序沒(méi)有語(yǔ)法高亮將是一件多么痛苦的事情啊,幸虧vim的作者是個(gè)程序員(如果不是,那可NB大了),提供了語(yǔ)法高亮功能,在上面的圖片中大家也可以看到那些注釋,關(guān)鍵字,字符串等,都用不同顏色顯示出來(lái)了,要做到這樣,首先要在你的~/.vimrc文件中增加下面幾句話(huà):syntaxenable
syntaxon再重新啟動(dòng)vim,并打開(kāi)一個(gè)c程序文件,是不是覺(jué)得眼前突然色彩繽紛了起來(lái)...
如果你不喜歡這個(gè)配色方案你可以在"編輯->配色方案"(gvim)中選擇一個(gè)你滿(mǎn)意的配色方案,然后在~/.vimrc文件中增加下面這句:colorschemedesertdesert是我喜歡的配色方案,你可以改成你的.如果菜單中的配色方案你還不滿(mǎn)意(你也太花了吧),沒(méi)關(guān)系,在上跟你一樣的人很多,他們做了各種各樣的顏色主題,你可以下載下來(lái)一個(gè)一個(gè)的試,多地可以看到你眼花.如果這樣你還不滿(mǎn)意(你還真是XXXX),沒(méi)關(guān)系,vim的作者早想到會(huì)有你這種人了,你可以創(chuàng)建你自己的顏色主題,把下面的這篇文檔好好學(xué)習(xí)一些一下吧::helpsyntax.txt
更炫的語(yǔ)法高亮:
你可能會(huì)發(fā)現(xiàn)很多東西沒(méi)有高亮起來(lái),比如運(yùn)算符號(hào),各種括號(hào),函數(shù)名,自定義類(lèi)型等,但是看上面的圖片,我的運(yùn)算符號(hào)和函數(shù)名都加亮了^_^,想知道為什么嗎?哇哈哈哈哈讓我來(lái)教你吧...
主要的思路是新建一個(gè)語(yǔ)法文件,在文件中定義你要高亮的東東,想高亮什么就高亮什么,用vim就是這么自信.所謂的語(yǔ)法文件就是vim用來(lái)高亮各種源文件的一個(gè)腳本,vim靠這個(gè)腳本的描述來(lái)使文件中的不同文本顯示不同的顏色,比如C語(yǔ)言的語(yǔ)法文件放在類(lèi)似于這樣的一個(gè)路徑中:
/usr/share/vim/vim64/syntax/c.vim
其他語(yǔ)言的語(yǔ)法文件也可以在這個(gè)路徑中找到,你的也許不在這個(gè)路徑中,不管它,在你自己的HOME下新建一個(gè)語(yǔ)法文件,新建一個(gè)空文件:
~/.vim/syntax/c.vim
在其中加入"========================================================
"HighlightAllFunction
"========================================================
synmatchcFunction"\<[a-zA-Z_][a-zA-Z_0-9]*\>[^()]*)("me=e-2
synmatchcFunction"\<[a-zA-Z_][a-zA-Z_0-9]*\>\s*("me=e-1
hicFunctiongui=NONEguifg=#B5A1FF
"========================================================
"HighlightAllMathOperator
"========================================================
"Cmathoperators
synmatchcMathOperatordisplay"[-+\*/%=]"
"Cpointeroperators
synmatchcPointerOperatordisplay"->\|\."
"Clogicaloperators-booleanresults
synmatchcLogicalOperatordisplay"[!<>]=\="
synmatchcLogicalOperatordisplay"=="
"Cbitoperators
synmatchcBinaryOperatordisplay"\(&\||\|\^\|<<\|>>\)=\="
synmatchcBinaryOperatordisplay"\~"
synmatchcBinaryOperatorErrordisplay"\~="
"MoreClogicaloperators-highlightinpreferencetobinary
synmatchcLogicalOperatordisplay"&&\|||"
synmatchcLogicalOperatorErrordisplay"\(&&\|||\)="
"MathOperator
hicMathOperatorguifg=#3EFFE2
hicPointerOperatorguifg=#3EFFE2
hicLogicalOperatorguifg=#3EFFE2
hicBinaryOperatorguifg=#3EFFE2
hicBinaryOperatorErrorguifg=#3EFFE2
hicLogicalOperatorguifg=#3EFFE2
hicLogicalOperatorErrorguifg=#3EFFE2
再打開(kāi)你的C文件看看,是不是又明亮了許多.還有一個(gè)壓箱底的要告訴你,如果你自己增加了一個(gè)類(lèi)型或者結(jié)構(gòu)之類(lèi)的,怎么讓它也象"int","void"這樣高亮起來(lái)呢?再在上面的文件~/.vim/syntax/c.vim中添加下面的東東:"========================================================
"MyOwnDataType
"========================================================
synkeywordcTypeMy_Type_1My_Type_2My_Type_3這樣你自己的類(lèi)型My_Type_1,My_Type_2,My_Type_3就也可以向"int"一樣高亮起來(lái)了,這樣的缺點(diǎn)是每增加一個(gè)類(lèi)型,就要手動(dòng)在這里添加一下,如果有人知道更簡(jiǎn)單的方法請(qǐng)一定一定要告訴我,用下面的地址:Email:lazy.fox.wu#gmailHomepage5在程序中跳來(lái)跳去:Ctags的使用哇,這下可厲害了,Tag文件(標(biāo)簽文件)可是程序員的看家寶呀,你可以不用它,但你不能不知道它,因?yàn)長(zhǎng)inux內(nèi)核源碼都提供了"maketags"這個(gè)選項(xiàng).下面我們就來(lái)介紹Tag文件.
tags文件是由ctags程序產(chǎn)生的一個(gè)索引文件,ctags程序其是叫"ExuberantCtags",是Unix上面ctags程序的替代品,并且比它功能強(qiáng)大,是大多數(shù)Linux發(fā)行版上默認(rèn)的ctags程序.那么tags文件是做什么用的呢?如果你在讀程序時(shí)看了一個(gè)函數(shù)調(diào)用,或者一個(gè)變量,或者一個(gè)宏等等,你想知道它們的定義在哪兒,怎么辦呢?用grep?那會(huì)搜出很多不相干的地方.現(xiàn)在流行用是的<C-]>,誰(shuí)用誰(shuí)知道呀,當(dāng)光標(biāo)在某個(gè)函數(shù)或變量上時(shí),按下"Ctrl+]",光標(biāo)會(huì)自動(dòng)跳轉(zhuǎn)到其定義處,夠厲害吧,你不用再羨慕VisualStudio的程序員了,開(kāi)始羨慕我吧~_~.
你現(xiàn)在先別急著去按<C-]>,你按沒(méi)用的,要不要我干什么呀,你現(xiàn)在要做的是查查你電腦里有沒(méi)有ctags這個(gè)程序,如果有,是什么版本的,如果是Ctags5.5.4,就象我一樣,你最好去裝一個(gè)Ctags5.6,這個(gè)在后面的自動(dòng)補(bǔ)全章節(jié)中會(huì)用到.在這個(gè)網(wǎng)站:://,下載一個(gè)類(lèi)似ctags-5.6.tar.gz的文件下來(lái)(現(xiàn)在好像5.7版的也出來(lái)了,不過(guò)我還沒(méi)用過(guò)):
用下面的命令解壓安裝:$tar-xzvfctags-5.6.tar.gz
$cdctags-5.6
$make
#makeinstall
//需要root權(quán)限
然后去你的源碼目錄,如果你的源碼是多層的目錄,就去最上層的目錄,在該目錄下運(yùn)行命令:ctags-R
我現(xiàn)在以vim71的源碼目錄做演示$cd/home/wooin/vim71
$ctags-R此時(shí)在/home/wooin/vim71目錄下會(huì)生成一個(gè)tags文件,現(xiàn)在用vim打開(kāi)/home/wooin/vim71/src/main.c$vim/home/wooin/vim71/src/main.c再在vim中運(yùn)行命令::settags=/home/wooin/vim71/tags該命令將tags文件加入到vim中來(lái),你也可以將這句話(huà)放到~/.vimrc中去,如果你經(jīng)常在這個(gè)工程編程的話(huà).
下面要開(kāi)始真刀實(shí)槍的開(kāi)干了,如下圖,將光標(biāo)放在setmouse()函數(shù)上
(圖3)
此時(shí)按下<C-]>,光標(biāo)會(huì)自動(dòng)跳到setmouse()函數(shù)的定義處,見(jiàn)下圖:
(圖4)
如果此時(shí)你還想再跳回剛才的位置,你還可以按<C-T>,這樣又跳回到setmouse()函數(shù)被調(diào)用的地方了,變量,結(jié)構(gòu),宏,等等,都可以的,趕快試試吧
此時(shí)在回頭學(xué)習(xí)一下第3節(jié)中說(shuō)的vim手冊(cè)吧:helpusr_29
不過(guò)還有一個(gè)小瑕疵,你修改程序后,比如增加了函數(shù)定義,刪除了變量定義,tags文件不能自動(dòng)rebuild,你必須手動(dòng)再運(yùn)行一下命令:$ctags-R使tags文件更新一下,不過(guò)讓人感到欣慰的是vim不用重新啟動(dòng),正在編寫(xiě)的程序也不用退出,馬上就可以又正確使用<C-]>和<C-T>了.如果有人知道更簡(jiǎn)單的方法請(qǐng)一定一定要告訴我,用下面的地址:Email:lazy.fox.wu#gmailHomepage6.教你高效地瀏覽源碼--插件:TagList下載地址版本4.4安裝在~/.vim目錄下解壓taglist_xx.zip手冊(cè):helptaglist.txt
在Windows平臺(tái)上用過(guò)SourceInsight看程序的人肯定很熟悉代碼窗口左邊那個(gè)Symbol窗口,那里面列出了當(dāng)前文件中的所有宏,全局變量,函數(shù)名等,在查看代碼時(shí)用這個(gè)窗口總攬全局,切換位置相當(dāng)方便,今天告訴你一個(gè)vim的插件:Taglist,可以同樣實(shí)現(xiàn)這個(gè)功能.
上一節(jié)已經(jīng)告訴你ctags的用法了,ctags的基本原理是將程序程序中的一些關(guān)鍵字(比如:函數(shù)名,變量名等)的名字,位置等信息通過(guò)一個(gè)窗口告訴你,如果你已經(jīng)安裝好taglist,則可以用下面的命令看看taglist自帶的幫助文件::helptaglist.txt下面是我翻譯的其中的第一段"Overview",供大家現(xiàn)了解一下taglist,翻譯的不好,請(qǐng)指教:
"TabList"是一個(gè)用來(lái)瀏覽源代碼的Vim插件,這個(gè)插件可以讓你高效地瀏覽各種不同語(yǔ)言編寫(xiě)的的源代碼,"TagList"有以下一些特點(diǎn):
*在Vim的一個(gè)垂直或水平的分割窗口中顯示一個(gè)文件中定義的tags(函數(shù),類(lèi),結(jié)構(gòu),
變量,等)
*在GUIVim中,可以選擇把tags顯示在下拉菜單和彈出菜單中
*當(dāng)你在多個(gè)源文件/緩沖區(qū)間切換時(shí),taglist窗口會(huì)自動(dòng)進(jìn)行相應(yīng)地更新.
當(dāng)你打開(kāi)新文件時(shí),新文件中定義的tags會(huì)被添加到已經(jīng)存在的文件列表中,
并且所有文件中定義的tags會(huì)以文件名來(lái)分組顯示
*當(dāng)你在taglist窗口中選中一個(gè)tag名時(shí),源文件中的光標(biāo)會(huì)自動(dòng)跳轉(zhuǎn)到該tag的定
義處
*自動(dòng)高亮當(dāng)前的tag名
*按類(lèi)型分組各tag,并且將各組顯示在一個(gè)可折疊的樹(shù)形結(jié)構(gòu)中
*可以顯示tag的原始類(lèi)型和作用域
*在taglist窗口可選擇顯示tag的原始類(lèi)型替代tag名
*tag列表可以按照tag名,或者時(shí)間進(jìn)行排序
*支持以下語(yǔ)言的源文件:Assembly,ASP,Awk,Beta,C,
C++,C#,Cobol,Eiffel,Erlang,Fortran,HTML,Java,Javascript,Lisp,
Lua,Make,Pascal,Perl,PHP,Python,Rexx,Ruby,Scheme,Shell,Slang,
SML,Sql,TCL,Verilog,VimandYacc.
*可以很簡(jiǎn)單的擴(kuò)展支持新的語(yǔ)言.對(duì)新語(yǔ)言支持的修改也很簡(jiǎn)單.
*提供了一些函數(shù),可以用來(lái)在Vim的狀態(tài)欄或者在窗口的標(biāo)題欄顯示當(dāng)前的tag名
*taglist中的文件和tags的列表可以在被保存和在vim會(huì)話(huà)間加載
*提供了一些用來(lái)取得tag名和原始類(lèi)型的命令
*在控制臺(tái)vim和GUIvim中都可以使用
*可以和winmanager插件一起使用.winmanager插件可以讓你同時(shí)使用文件瀏覽器,
緩沖區(qū)瀏覽器和taglist插件,就像一個(gè)IDE一樣.
*可以在Unix和MS-Windows系統(tǒng)中使用
首先請(qǐng)先在你的~/.vimrc文件中添加下面兩句:letTlist_Show_One_File=1
letTlist_Exit_OnlyWindow=1此時(shí)用vim打開(kāi)一個(gè)c源文件試試:$vim~/vim/src/main.c進(jìn)入vim后用下面的命令打開(kāi)taglist窗口,如圖5::Tlist
(圖5)
左邊的窗口就是前面介紹的TagList窗口,其中列出了main.c文件中的tag,并且按照"typedef","variable","function"等進(jìn)行了分類(lèi).將光標(biāo)移到VimMain上,如圖中左邊紅色的方框,按下回車(chē)后,源程序會(huì)自動(dòng)跳轉(zhuǎn)到VimMain的定義處,如圖中右邊的紅色方框.這就是TagList最基本也是最常用的操作.再教你一個(gè)常用的操作,你在瀏覽TagList窗口時(shí),如果還不想讓源碼跳轉(zhuǎn),但是想看看tag在源碼中完整的表達(dá),可以將光標(biāo)移到你想要看的tag上,如圖中上邊黃色的方框,然后按下空格鍵,在下面的命令欄中,如圖下邊黃色的方框,會(huì)顯示該tag在源碼中完整的寫(xiě)法,而不會(huì)跳轉(zhuǎn)到源碼處.
TagList插件我就介紹到這里,其實(shí)它還有很多用法和設(shè)置,我沒(méi)法一一地教你了,好在TagList有一份詳細(xì)的幫助手冊(cè),用下面的命令打開(kāi)手冊(cè),好好學(xué)習(xí)一下吧::helptaglist.txt7.文件瀏覽器和窗口管理器--插件:WinManager下載地址版本2.x安裝在~/.vim目錄下解壓winmanager.zip手冊(cè):helpwinmanager
在圖1中大家可以看到在圖標(biāo)2標(biāo)識(shí)的地方是一個(gè)文件瀏覽器,里面列出了當(dāng)前目錄中的文件,可以通過(guò)這個(gè)瀏覽器來(lái)瀏覽工程中的源文件,是不是越來(lái)越像常見(jiàn)的IDE了,當(dāng)光標(biāo)停在某個(gè)文件或文件夾的時(shí)候,按下回車(chē),可以打開(kāi)該文件或文件夾.
這個(gè)東東是怎么調(diào)出來(lái)的呢?其實(shí)這個(gè)也是由插件實(shí)現(xiàn)的,這個(gè)插件是netrw.vim,只不過(guò)你不用下載和安裝,這個(gè)插件已經(jīng)是標(biāo)準(zhǔn)的vim插件,已經(jīng)隨vim一起安裝進(jìn)你的系統(tǒng)里了,現(xiàn)在先簡(jiǎn)單演示一下,進(jìn)入"~/vim71"文件夾后運(yùn)行vim,然后在vim中運(yùn)行命令::e~/vim71你將在vim看到如下圖所示的界面:
(圖6)
在該界面上你可以用下面的一些命令來(lái)進(jìn)行常用的目錄和文件操作:<F1>顯示幫助<cr>如果光標(biāo)下是目錄,則進(jìn)入該目錄;如果光標(biāo)下文件,則打開(kāi)該文件-返回上級(jí)目錄c切換vim當(dāng)前工作目錄正在瀏覽的目錄d創(chuàng)建目錄D刪除目錄或文件i切換顯示方式R文件或目錄重命名s選擇排序方式x定制瀏覽方式,使用你指定的程序打開(kāi)該文件
我這里不是教你怎么用netrw.vim插件,而是要教你通過(guò)WinManager插件來(lái)將TagList窗口和netrw窗口整合起來(lái),就像圖1中的圖標(biāo)2和3組成的那個(gè)效果
現(xiàn)在在你的~/.vimrc中增加下面兩句letg:winManagerWindowLayout='FileExplorer|TagList'
nmapwm:WMToggle<cr>然后重啟vim,打開(kāi)~/vim71/src/main.c,在normal狀態(tài)下輸入"wm",你將看到圖7的樣子:
(圖7)
其中左上邊是netrw窗口,左下邊是TagList窗口,當(dāng)再次輸入"wm"命令時(shí)這兩個(gè)窗口又關(guān)閉了.
WinManager的功能主要就是我介紹的這些,但是它還有其他一些高級(jí)功能,還可以支持其他幾個(gè)插件,如果你覺(jué)得我介紹的還不夠你用,建議你把它的幫助手冊(cè)好好研究一下,用下面的命令可以調(diào)出幫助手冊(cè)::helpwinmanager8.Cscope的使用這下更厲害了,用Cscope自己的話(huà)說(shuō)-"你可以把它當(dāng)做是超過(guò)頻的ctags",其功能和強(qiáng)大程度可見(jiàn)一斑吧,關(guān)于它的介紹我就不詳細(xì)說(shuō)了,如果你安裝好了前文介紹的中文幫助手冊(cè),用下面的命令看看介紹吧::helpif_cscop.txt我在這里簡(jiǎn)單摘抄一點(diǎn),供還在猶豫的朋友看看:
Cscope是一個(gè)交互式的屏幕下使用的工具,用來(lái)幫助你:
*無(wú)須在厚厚的程序清單中翻來(lái)翻去就可以認(rèn)識(shí)一個(gè)C程序的工作原理。
*無(wú)須熟悉整個(gè)程序就可以知道清楚程序bug所要修改的代碼位置。
*檢查提議的改動(dòng)(如添加一個(gè)枚舉值)可能會(huì)產(chǎn)生的效果。
*驗(yàn)證所有的源文件都已經(jīng)作了需要的修改;例如給某一個(gè)現(xiàn)存的函數(shù)添加一個(gè)參數(shù)。
*在所有相關(guān)的源文件中對(duì)一個(gè)全局變量改名。
*在所有相關(guān)的位置將一個(gè)常數(shù)改為一個(gè)預(yù)處理符號(hào)。
它被設(shè)計(jì)用來(lái)回答以下的問(wèn)題:
*什么地方用到了這個(gè)符號(hào)?
*這是在什么地方定義的?
*這個(gè)變量在哪里被賦值?
*這個(gè)全局符號(hào)的定義在哪里?
*這個(gè)函數(shù)在源文件中的哪個(gè)地方?
*哪些函數(shù)調(diào)用了這個(gè)函數(shù)?
*這個(gè)函數(shù)調(diào)用了哪些函數(shù)?
*信息"outofspace"從哪來(lái)?
*這個(gè)源文件在整個(gè)目錄結(jié)構(gòu)中處于什么位置?
*哪些文件包含這個(gè)頭文件?
安裝Cscope:
如果你的系統(tǒng)中有cscope命令,則可以跳過(guò)這一小段,如果沒(méi)有,就先跟著我一起安裝一個(gè)吧.
在Cscope的主頁(yè):://下載一個(gè)源碼包,解壓后編譯安裝:#./configure
#make
#makeinstall
//需要root權(quán)限
先在~/vimrc中增加一句::setcscopequickfix=s-,c-,d-,i-,t-,e-這個(gè)是設(shè)定是否使用quickfix窗口來(lái)顯示cscope結(jié)果,用法在后面會(huì)說(shuō)到。
跟Ctags一樣,要使用其功能必須先為你的代碼生成一個(gè)cscope的數(shù)據(jù)庫(kù),在項(xiàng)目的根目錄運(yùn)行下面的命令:$cd/home/wooin/vim71/
$cscope-Rbq
#此后會(huì)生成三個(gè)文件
$llcscope.*
-rw-rw-r--1wooinwooin1.1M2007-09-3010:56cscope.in.out
-rw-rw-r--1wooinwooin6.7M2007-09-3010:56cscope.out
-rw-rw-r--1wooinwooin5.1M2007-09-3010:56cscope.po.out
#打開(kāi)文件,開(kāi)始Coding
$cdsrc
$vimain.c進(jìn)入vim后第一件事是要把剛才生成的cscope文件導(dǎo)入到vim中來(lái),用下面的命令::csadd/home/wooin/vim71/cscope.out/home/wooin/vim71上面這條命令很重要,必須寫(xiě)全,不能只寫(xiě)前半句:
:csadd/home/wooin/vim71/cscope.out
因?yàn)樵创a是多級(jí)目錄的,如果這樣寫(xiě),cscope是無(wú)法在子目錄中的源碼中工作的,當(dāng)然,如果你的源碼都在同一級(jí)目錄中就無(wú)所謂了.如果你要經(jīng)常用cscope的話(huà),可以把上面那句加到~/.vimrc中去.
下面我們來(lái)操練一下,查找函數(shù)vim_strsave()的定義,用命令::csfindgvim_strsave如下圖:
(圖8)
按下回車(chē)后會(huì)自動(dòng)跳轉(zhuǎn)到vim_strsave()的定義處.此時(shí)你肯定會(huì)說(shuō)Ctags也可以做到這個(gè)呀,那么下面說(shuō)的這個(gè)Ctags就無(wú)法做到了,我想查找vim_strsave()到底在那些地方被調(diào)用過(guò)了,用命令::csfindcvim_strsave按下回車(chē)后vim會(huì)自動(dòng)跳轉(zhuǎn)到第一個(gè)符合要求的地方,并且在命令欄顯示有多少符合要求的結(jié)果,如圖:
(圖9)
如果自動(dòng)跳轉(zhuǎn)的位置你不滿(mǎn)意,想看其他的結(jié)果,可以用下面的命令打開(kāi)QuickFix窗口::cw如圖:
(圖10)
這時(shí)你就可以慢慢挑選了^_^
cscope的主要功能是通過(guò)同的子命令"find"來(lái)實(shí)現(xiàn)的
"cscopefind"的用法:
csfindc|d|e|f|g|i|s|tname0或s查找本C符號(hào)(可以跳過(guò)注釋)1或g查找本定義2或d查找本函數(shù)調(diào)用的函數(shù)3或c查找調(diào)用本函數(shù)的函數(shù)4或t查找本字符串6或e查找本egrep模式7或f查找本文件8或i查找包含本文件的文件
如果每次查找都要輸入一長(zhǎng)串命令的話(huà)還真是件討人厭的事情,Cscope的幫助手冊(cè)中推薦了一些快捷鍵的用法,下面是其中一組,也是我用的,將下面的內(nèi)容添加到~/.vimrc中,并重啟vim:nmap<C-_>s:csfinds<C-R>=expand("<cword>")<CR><CR>
nmap<C-_>g:csfindg<C-R>=expand("<cword>")<CR><CR>
nmap<C-_>c:csfindc<C-R>=expand("<cword>")<CR><CR>
nmap<C-_>t:csfindt<C-R>=expand("<cword>")<CR><CR>
nmap<C-_>e:csfinde<C-R>=expand("<cword>")<CR><CR>
nmap<C-_>f:csfindf<C-R>=expand("<cfile>")<CR><CR>
nmap<C-_>i:csfindi^<C-R>=expand("<cfile>")<CR>$<CR>
nmap<C-_>d:csfindd<C-R>=expand("<cword>")<CR><CR>當(dāng)光標(biāo)停在某個(gè)你要查找的詞上時(shí),按下<C-_>g,就是查找該對(duì)象的定義,其他的同理.
按這種組合鍵有一點(diǎn)技巧,按了<C-_>后要馬上按下一個(gè)鍵,否則屏幕一閃就回到nomal狀態(tài)了
<C-_>g的按法是先按"Ctrl+Shift+-",然后很快再按"g"
很奇怪,其中的這句:
nmap<C-_>i:csfindi^<C-R>=expand("<cfile>")<CR>$<CR>
在我的vim中無(wú)法工作,但是我改成:
nmap<C-_>i:csfindi<C-R>=expand("<cfile>")<CR><CR>
就可以正常工作了,不知道是什么原因?有哪位朋友知道請(qǐng)告訴我.
cscope的其他功能你可以通過(guò)幫助手冊(cè)自己慢慢學(xué)習(xí)
reset:重新初始化所有連接。
用法
:csreset9.QuickFix窗口在上一節(jié)的圖10中大家可以看到在窗口下面有一個(gè)顯示查詢(xún)結(jié)果的窗口,這個(gè)窗口中列出了查詢(xún)命令的查詢(xún)結(jié)果,用戶(hù)可以從這個(gè)窗口中選擇每個(gè)結(jié)果進(jìn)行查看,這個(gè)窗口叫"QuickFix"窗口,以前也是一個(gè)vim的插件來(lái)的,只不過(guò)現(xiàn)在成了vim的標(biāo)準(zhǔn)插件,不用你在去安裝了,QuickFix窗口的主要作用就是上面看到的那個(gè)功能:輸出一些供選擇的結(jié)果,可以被很多命令調(diào)用,更詳細(xì)的介紹和使用方法請(qǐng)用下面的命令打開(kāi)QuickFix的手冊(cè)來(lái)學(xué)習(xí)吧::helpquickfix這里我一個(gè)常用的例子來(lái)再介紹一種QuickFix窗口的使用方法.這個(gè)例子是要模仿平時(shí)我們編程時(shí),當(dāng)編譯出錯(cuò)時(shí),QuickFix會(huì)把出錯(cuò)的信息列出來(lái),供我們一條條地查看和修改.首先還是用vim打開(kāi)~/vim71/src/main.c,事先最好先編譯過(guò)vim71,否則一會(huì)兒編譯的時(shí)候有點(diǎn)慢,或者你也可以自己寫(xiě)一個(gè)小的有錯(cuò)誤的程序來(lái)跟著我做下面的步驟,見(jiàn)下圖:
(圖11)
我們修改一下main.c,人為地造成幾處錯(cuò)誤,在第1019行增加了一個(gè)baobao_wu的沒(méi)有任何定義的字符串,刪除了第1行最后的一個(gè)括號(hào)")",然后用下面的命令進(jìn)行編譯::make顯然編譯會(huì)報(bào)很多錯(cuò)誤,當(dāng)編譯結(jié)束并退出到源碼界面時(shí),剛才編譯器報(bào)的錯(cuò)誤都已經(jīng)看不到了,但是我們可以用QuickFix窗口再將錯(cuò)誤信息找出來(lái),用下面的命令調(diào)出QuickFix窗口::cw此時(shí)你就可以看如下圖所示的QuickFix窗口了:
(圖12)
在下面的QuickFix窗口中我們可以找到每一個(gè)編譯錯(cuò)誤,同樣你可以用鼠標(biāo)點(diǎn)擊每一條記錄,代碼會(huì)馬上自動(dòng)跳轉(zhuǎn)到錯(cuò)誤處,你還可以用下面的命令來(lái)跳轉(zhuǎn)::cn
//切換到下一個(gè)結(jié)果
:cp
//切換到上一個(gè)結(jié)果如果你經(jīng)常使用這兩個(gè)命令,你還可以給他們?cè)O(shè)定快捷鍵,比如在~/.vimrc中增加:nmap<F6>:cn<cr>
nmap<F7>:cp<cr>
其還有其他的命令/插件也會(huì)用到QuickFix窗口,但是用法基本上的都是類(lèi)似的,本文后面還會(huì)用到QuickFix窗口,接著往下看吧.10.快速瀏覽和操作Buffer--插件:MiniBufExplorer下載地址版本安裝將下載的minibufexpl.vim文件丟到~/.vim/plugin文件夾中即可手冊(cè)在minibufexpl.vim文件的頭部
在編程的時(shí)候不可能永遠(yuǎn)只編輯一個(gè)文件,你肯定會(huì)打開(kāi)很多源文件進(jìn)行編輯,如果每個(gè)文件都打開(kāi)一個(gè)vim進(jìn)行編輯的話(huà)那操作起來(lái)將是多麻煩啊,所以vim有buffer(緩沖區(qū))的概念,可以看vim的幫助:
:helpbuffer
vim自帶的buffer管理工具只有:ls,:bnext,:bdelete等的命令,既不好用,又不直觀.現(xiàn)在隆重向你推薦一款vim插件(plugin):MiniBufExplorer
使用方法:
重新啟動(dòng)vim,當(dāng)你只編輯一個(gè)buffer的時(shí)候MiniBufExplorer派不上用場(chǎng),當(dāng)你打開(kāi)第二個(gè)buffer的時(shí)候,MiniBufExplorer窗口就自動(dòng)彈出來(lái)了,見(jiàn)下圖:
(圖13)
上面那個(gè)狹長(zhǎng)的窗口就是MiniBufExplorer窗口,其中列出了當(dāng)前所有已經(jīng)打開(kāi)的buffer,當(dāng)你把光標(biāo)置于這個(gè)窗口時(shí),有下面幾個(gè)快捷鍵可以用:<Tab>向前循環(huán)切換到每個(gè)buffer名上<S-Tab>向后循環(huán)切換到每個(gè)buffer名上<Enter>在打開(kāi)光標(biāo)所在的bufferd刪除光標(biāo)所在的buffer
以下的兩個(gè)功能需要在~/.vimrc中增加:letg:miniBufExplMapCTabSwitchBufs=1<C-Tab>向前循環(huán)切換到每個(gè)buffer上,并在但前窗口打開(kāi)<C-S-Tab>向后循環(huán)切換到每個(gè)buffer上,并在但前窗口打開(kāi)
如果在~/.vimrc中設(shè)置了下面這句:letg:miniBufExplMapWindowNavVim=1則可以用<C-h,j,k,l>切換到上下左右的窗口中去,就像:
C-w,hjkl
向"左,下,上,右"切換窗口.
在~/.vimrc中設(shè)置:letg:miniBufExplMapWindowNavArrows=1是用<C-箭頭鍵>切換到上下左右窗口中去11.c/h文件間相互切換--插件:A下載地址版本安裝將a.vim放到~/.vim/plugin文件夾中手冊(cè)無(wú)
下面介紹它的用法:
作為一個(gè)C程序員,日常Coding時(shí)在源文件與頭文件間進(jìn)行切換是再平常不過(guò)的事了,直接用vim打開(kāi)其源/頭文件其實(shí)也不是什么麻煩事,但是只用一個(gè)按鍵就切換過(guò)來(lái)了,這是多么貼心的功能啊
安裝好a.vim后有下面的幾個(gè)命令可以用了::A在新Buffer中切換到c\h文件:AS橫向分割窗口并打開(kāi)c\h文件:AV縱向分割窗口并打開(kāi)c\h文件:AT新建一個(gè)標(biāo)簽頁(yè)并打開(kāi)c\h文件其他還有一些命令,你可以在它的網(wǎng)頁(yè)上看看,我都沒(méi)用過(guò),其實(shí)也都是大同小異,找到自己最順手的就行了.
我在~/.vimrc中增加了一句:nnoremap<silent><F12>:A<CR>意思是按F12時(shí)在一個(gè)新的buffer中打開(kāi)c\h文件,這樣在寫(xiě)程序的時(shí)候就可以不假思索地在c/h文件間進(jìn)行切換,減少了按鍵的次數(shù),思路也就更流暢了,阿彌陀佛12.在工程中查找--插件:Grep下載地址版本1.8安裝把grep.vim文件丟到~/.vim/plugin文件夾就好了手冊(cè)在grep.vim文件頭部
下面介紹它的用法:
vim有自己的查找功能,但是跟shell中的grep比起來(lái)還是有些差距的,有時(shí)Coding正火急火燎的時(shí)候,真想按下F3,對(duì)光標(biāo)所在的詞來(lái)個(gè)全工程范圍的grep,不用敲那些繁瑣的命令,現(xiàn)在福音來(lái)了,跟我同樣懶的人不在少數(shù),在grep.vim腳本的前部可以找到一些說(shuō)明文檔::Grep按照指定的規(guī)則在指定的文件中查找:Rgrep同上,但是是遞歸的grep:GrepBuffer在所有打開(kāi)的緩沖區(qū)中查找:Bgrep同上:GrepArgs在vim的argumentfilenames(:args)中查找:Fgrep運(yùn)行fgrep:Rfgrep運(yùn)行遞歸的fgrep:Egrep運(yùn)行egrep:Regrep運(yùn)行遞歸的egrep:Agrep運(yùn)行agrep:Ragrep運(yùn)行遞歸的agrep
上面的命令是類(lèi)似這樣調(diào)用的::Grep
[<grep_options>][<search_pattern>[<file_name(s)>]]:Rgrep
[<grep_options>][<search_pattern>[<file_name(s)>]]:Fgrep
[<grep_options>][<search_pattern>[<file_name(s)>]]:Rfgrep[<grep_options>][<search_pattern>[<file_name(s)>]]:Egrep
[<grep_options>][<search_pattern>[<file_name(s)>]]:Regrep[<grep_options>][<search_pattern>[<file_name(s)>]]:Agrep
[<grep_options>][<search_pattern>[<file_name(s)>]]:Ragrep[<grep_options>][<search_pattern>[<file_name(s)>]]:GrepBuffer[<grep_options>][<search_pattern>]:Bgrep[<grep_options>][<search_pattern>]:GrepArgs[<grep_options>][<search_pattern>]
但是我從來(lái)都不用敲上面那些命令的^_^,因?yàn)槲以趡/.vimrc中增加了下面這句:nnoremap<silent><F3>:Grep<CR>比如你想在/home/wooin/vim71/src/main.c中查找"FEAT_QUICKFIX",則將光標(biāo)移到"FEAT_QUICKFIX"上,然后按下F3鍵,如下圖:
(圖14)
在最下面的命令行會(huì)顯示:Searchforpattern:FEAT_QUICKFIX此時(shí)你還可以編輯該行,grep支持正則表達(dá)式,你想全詞匹配的話(huà)可以改成:Searchforpattern:\<FEAT_QUICKFIX\>然后按下回車(chē):
(圖15)
在最下面的命令行會(huì)顯示:Searchinfiles:*是問(wèn)你搜索范圍,默認(rèn)是該目錄下的所有文件,此時(shí)你還可以編輯該行,比如你只想搜索源碼文件:Searchinfiles:*.c*.h然后在按下回車(chē),會(huì)在彈出的QuickFix窗口中列出所有符合條件的搜索結(jié)果,你可以在其中查找你想要的結(jié)果,如下圖:
(圖16)
其實(shí)還有一些其他功能和設(shè)置,但是我都沒(méi)有用過(guò),這些功能再加上正則表達(dá)式,已經(jīng)夠我用了,其他的你可以在網(wǎng)頁(yè)上看看它的文檔,如果有什么驚人發(fā)現(xiàn)記得跟我互通有無(wú),共同進(jìn)步哦13.高亮的書(shū)簽--插件:VisualMark下載地址版本安裝把visualmark.vim文件丟到~/.vim/plugin文件夾就好了手冊(cè)無(wú)
下面介紹它的用法:
vim也和其他編輯器一樣有"書(shū)簽"概念,在vim中叫"Mark",可以用下面的命令查看相關(guān)說(shuō)明::helpMark該"書(shū)簽"有個(gè)很很大的缺點(diǎn):不可見(jiàn).
我下面要介紹的VisualMark插件跟vim中的"Mark"沒(méi)有什么關(guān)系,并不是使其可見(jiàn),而是自己本身就是"可見(jiàn)的書(shū)簽",接著往下看就明白了,用作者的話(huà)說(shuō)就是"類(lèi)似UltraEdit中的書(shū)簽".
另外,網(wǎng)上也有使vim中的Mark可見(jiàn)的插件,但是我試了一下,好像沒(méi)VisualMark好用,我就不介紹了.
按照上面的方法安裝好VisualMark后,你什么也不用設(shè)置,如果是gvim,直接在代碼上按下Ctrl+F2,如果是vim,用"mm",怎么樣,發(fā)現(xiàn)光標(biāo)所在的行變高亮了吧,見(jiàn)下圖:
(圖17)
如果你設(shè)置了多個(gè)書(shū)簽,你可以用F2鍵正向在期間切換,用Shift+F2反向在期間切換.
好了,我VisualMark介紹完了,夠簡(jiǎn)單吧^_^.
如果你嫌書(shū)簽的顏色不好看,你還可以自己定義,不過(guò)是修改這個(gè)插件腳本的的源碼,在目錄~/.vim/plugin/中找到并打開(kāi)visualmark.vim,找到下面這段代碼:if&bg=="dark"
//根據(jù)你的背景色風(fēng)格來(lái)設(shè)置不同的書(shū)簽顏色
highlightSignColorctermfg=whitectermbg=blueguifg=wheatguibg=peru
else
//主要就是修改guibg的值來(lái)設(shè)置書(shū)簽的顏色
highlightSignColorctermbg=whitectermfg=blueguibg=greyguifg=RoyalBlue3
endif
我還有幾個(gè)不滿(mǎn)意的地方:
1這個(gè)書(shū)簽不能自動(dòng)保存,關(guān)閉vim就沒(méi)了.
2切換書(shū)簽時(shí)不能在不同文件間切換,只能在同一個(gè)文件中切換
如果哪位朋友能解決這兩個(gè)問(wèn)題,請(qǐng)一定要告訴寡人啊還是用下面的地址:Email:lazy.fox.wu#gmailHomepage14.自動(dòng)補(bǔ)全用過(guò)MicrosoftVisualStudio的朋友一定知道代碼補(bǔ)全功能,輸入一個(gè)對(duì)象名后再輸入"."或者"->",則其成員名都可以列出來(lái),使Coding流暢了許多,實(shí)現(xiàn)很多懶人的夢(mèng)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 鷹課件語(yǔ)文教學(xué)課件
- 特殊旅客課件教學(xué)課件
- 2024年度建設(shè)工程施工合同工期與質(zhì)量要求
- 2024年度維修保養(yǎng)服務(wù)合同
- 2024年城鄉(xiāng)供水工程特許經(jīng)營(yíng)合同
- 2024年度設(shè)備采購(gòu)合同:甲乙雙方在二零二四年就某設(shè)備的采購(gòu)的詳細(xì)合同條款
- 2024企業(yè)人力資源管理與聘用合同詳細(xì)規(guī)定
- 2024年家長(zhǎng)學(xué)生老師三方面協(xié)議
- 2024年國(guó)際貨物買(mǎi)賣(mài)合同:機(jī)械設(shè)備
- 【初中生物】觀察周邊環(huán)境中的生物+課件2024-2025學(xué)年人教版生物七年級(jí)上冊(cè)
- 辦稅服務(wù)外包投標(biāo)方案(技術(shù)標(biāo))
- 冷庫(kù)是有限空間應(yīng)急預(yù)案
- 基于PLC的機(jī)械手控制系統(tǒng)設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 足軟組織感染的護(hù)理查房
- 建設(shè)項(xiàng)目竣工環(huán)境保護(hù)驗(yàn)收管理辦法
- 植物學(xué)課件:第二章 種子和幼苗
- 一日生活中幼兒自主探究行為的表現(xiàn)及支持策略研究
- 第8課 用制度體系保證人民當(dāng)家做主
- 軟件測(cè)試規(guī)范模板
- 足皮膚感染的護(hù)理課件
- 新蘇教版六年級(jí)上冊(cè)科學(xué)全冊(cè)知識(shí)點(diǎn)(精編)
評(píng)論
0/150
提交評(píng)論