手把手教你將vim配置成一個C/C++的超級IDE


轉自:

http://paul.xhblog.com/archives/2008/322824.shtml

在沒有怎么太深的接觸vi/vim之前,也曾經搞不懂為什么有好多linux下的程序員說vi/vim是個超級的代碼編輯器或者編譯器,也有不少的 (我認 為是剛在linux編程不久的人)說,“。。頭讓門擠啦,有那么多功能強大的linux環境下的IDE不用,竟然就用個簡單的vi/vim,不用說界面類 似DOS,連編譯都要用命令。。”。。等等類似的評價吧。
      我開始也不懂它到底哪強大,但我仍堅持使用vim可以說是據以兩點原因:
      1、既然有那么多的前輩說它強大,那么就必定有他的道理 
      2、我規定自己以后的發展方向是 The Embedded System on Linux,所以,在嵌入式硬件平台資源很有限的情況下,使用耗資大的IDE有點不現實,但是vi/vim卻非常適合應用在這種硬件平台上。
      好了,其實我現在也是個linux下編程的新手,但我堅信我選擇用vi/vim是正確的。
      下面我們就在Ubuntu7.10下用vi/vim搭建c/c++的編程環境,至於到底超不超級的,相信大家自有評價   ^.^
注:本文主要參考和引用了 吳垠 的文章《手把手交你把Vim改裝成一個IDE編程環境》, 地址:http://blog.csdn.net/wooin/archive/2007/10/31/1858917.aspx

如果涉及到版權問題,請通知我,我會及時處理 ^.^      不過該文章主要是用gvim在RedHat上搭建的,考慮到在嵌入式系統的硬件平台可能用不了gvim,故采用純粹的vi/vim,而且主機環境為 Ubuntu7.10,這樣,一些文件的安裝路徑可能和RedHat的有所區別,請讀者自己注意吧 :)

      本文已經假設你已經升級到了完整版的Vim7.1.56,而且已經安裝了如gcc和g++等必須的編譯器。

1、Vi/Vim中文幫助手冊的安裝。

       a、 下載幫助中文包http://vcd.gro.clinux.org/-》UN*X打包文件,我下到的是vimcdoc-1.6.0.tar.gz,解壓后,進入到該解壓后的文件夾vimcdoc-1.6.0,執行命令
      $ sudo ./vimcdoc.sh -i            //對中文幫助文件進行安裝,詳細可參考文件“INSTALL” 
      安裝完成后, 在終端打開vi/vim,輸入命令":help",即可看到,顯示的幫助文件已經為中文了。
      b、vim編程常用命令():
       建議先看看幫助手冊中的下面章節, 其中有關tags文件的部分你可以先跳過, 在后面的章節中會講到, 到時候你在回來看看, 就覺得很簡單了:
      :help usr_29
      :help usr_30
       下面是我常用的一些命令, 放在這里供我備忘:

% 跳轉到配對的括號去
[[ 跳轉到代碼塊的開頭去(但要求代碼塊中'{'必須單獨占一行)
gD 跳轉到局部變量的定義處
'' 跳轉到光標上次停靠的地方, 是兩個', 而不是一個"
mx 設置書簽,x只能是a-z的26個字母
`x 跳轉到書簽處("`"是1左邊的鍵)
> 增加縮進,"x>"表示增加以下x行的縮進
< 減少縮進,"x<"表示減少以下x行的縮進


    2、語法高亮顯示:

       編輯配置文件:$ sudo vi /etc/vim/vimrc ,取消掉“syntax on”的注釋,就可以開啟代碼編輯時的語法高亮顯示了,並增加設置“colorscheme murphy" ,其中murphy是配色方案, 所有的配色方案保存在目錄“/usr/share/vim/vim71/colors”里,以“.vim”為結尾的文件。如果這里面沒有你喜歡的主題,則 在vim.org上一定會有符合你胃口的主題。
       更炫的語法高亮:(
       你可能會發現很多東西沒有高亮起來, 比如運算符號, 各種括號, 函數名, 自定義類型等, 但是看上面的圖片, 我的運算符號和函數名都加亮了^_^, 想知道為什么嗎? 哇哈哈哈哈.... 讓我來教你吧 ...
      主要的思路是新建一個語法文件, 在文件中定義你要高亮的東東, 想高亮什么就高亮什么, 用vim就是這么自信. 所謂的語法文件就是vim用來高亮各種源文件的一個腳本, vim靠這個腳本的描述來使文件中的不同文本顯示不同的顏色, 比如C語言的語法文件放在類似於這樣的一個路徑中: /usr/share/vim/vim71/syntax,在其中加入

"======================================================== " Highlight All "======================================================== syn match c "\<[a-zA-Z_][a-zA-Z_0-9]*\>[^()]*)("me=e-2 syn match c "\<[a-zA-Z_][a-zA-Z_0-9]*\>\s*("me=e-1 hi c gui=NONE guifg=#B5A1FF "======================================================== " Highlight All Math Operator "======================================================== " C math operators syn match cMathOperator display "[-+\*/%=]" " C pointer operators syn match cPointerOperator display "->\|\." " C logical operators - boolean results syn match cLogicalOperator display "[!<>]=\=" syn match cLogicalOperator display "==" " C bit operators syn match cBinaryOperator display "\(&\||\|\^\|<<\|>>\)=\=" syn match cBinaryOperator display "\~" syn match cBinaryOperatorError display "\~=" " More C logical operators - highlight in preference to binary syn match cLogicalOperator display "&&\|||" syn match cLogicalOperatorError display "\(&&\|||\)=" " Math Operator hi cMathOperator guifg=#3EFFE2 hi cPointerOperator guifg=#3EFFE2 hi cLogicalOperator guifg=#3EFFE2 hi cBinaryOperator guifg=#3EFFE2 hi cBinaryOperatorError guifg=#3EFFE2 hi cLogicalOperator guifg=#3EFFE2 hi cLogicalOperatorError guifg=#3EFFE2 "=============================================================================


      再打開你的C文件看看, 是不是又明亮了許多. 還有一個壓箱底的要告訴你, 如果你自己增加了一個類型或者結構之類的, 怎么讓
它也象"int", "void"這樣高亮起來呢? 再在上面的文件添加如下的設置:
"========================================================
" My Own DataType
"========================================================
syn keyword cType       My_Type_1 My_Type_2 My_Type_3

      3、在程序中跳來跳去:Ctags的使用
      你在讀程序時看了一個函數調用, 或者一個變量, 或者一個宏等等, 你想知道它們的定義在哪兒, 怎么辦呢?就用Ctag來實現這個功能:
      到http://ctags.sourceforge.net/下載,解壓后順序執行“./configure”、“make”、“make install”即可完成安裝。
     
然后去你的源碼目錄, 如果你的源碼是多層的目錄, 就去最上層的目錄, 在該目錄下運行命令ctags -R,現在以我的
~/download/anjuta-2.4.0/src/為例,

$ cd ~/download/anjuta-2.4.0/
$ ctags -R
此時在~/download/anjuta-2.4.0/目錄下會生成一個 tags 文件, 現在用vim打開~/download/anjuta-2.4.0/src/main.c           

再在vim中運行命令:

:set tags=~/download/anjuta-2.4.0/tags

該命令將tags文件加入到vim中來, 你也可以將這句話放到vimrc中去, 如果你經常在這個工程編程的話.

此時,將鼠標移到一個變量上后,按下Ctrl+],便會自動跳轉到該變量的定義處,再按下Ctrl+T,便會返回到原來處。
使用對象為變量, 結構, 宏, 等等, 都可以的, 趕快試試吧.....
此時在回頭學習一下第3節中說的vim手冊吧
:help usr_29


不過還有一個小瑕疵, 你修改程序后, 比如增加了函數定義, 刪除了變量定義, tags文件不能自動rebuild, 你必須手動再運行一下命令:

$ ctags -R

使tags文件更新一下, 不過讓人感到欣慰的是vim不用重新啟動, 正在編寫的程序也不用退出, 馬上就可以又正確使用<C-]>和<C-T>了.



4、教你高效的瀏覽源碼--插件:Taglist
下載地址 http://www.vim.org/s/.php?_id=273
版本 4.5
下載完成並解壓縮后,將相應的插件和doc復制到vim目錄:

h-jingbo@Ubuntu:/usr/share/vim/vim71$ sudo cp /home/h-jingbo/download/plugin/taglist.vim plugin/

h-jingbo@Ubuntu:/usr/share/vim/vim71$ sudo cp /home/h-jingbo/download/doc/taglist.txt doc/

        由於以前已經安裝過了中文的help文件,所以在vi中輸入命令 :help taglist.txt是會提示找不到該幫助文件,可能是由於已經更改了vim的幫助文件的路徑了吧,這就不詳細研究了。
        為了顯示Tlist的窗口的關閉於打開合適些,在文件 /etc/vim/vimrc 配置文件中加入下列的設置:

let Tlist_Show_One_File=1
let Tlist_Exit_OnlyWindow=1

       用vim打開一個程序代碼后,執行命令 : Tlist,即可看到形如下面的界面:

500)this.width=500;">

        其中,左面的窗口為運行Tlist形成的窗口,右邊為該文件的源代碼,在不同的窗口間,可以用Ctrl+兩次W進行切換,TagList窗口, 其中列出了main.c文件中的tag, 並且按照"typedef", "variable", ""等進行了分類. 將光標移到左側的如圖所示的變量, 按下回車后, 源程序會自動跳轉到該變量的定義處,這就是TagList最基本也是最常用的操作. 再教你一個常用的操作, 你在瀏覽TagList窗口時, 如果還不想讓源碼跳轉, 但是想看看tag在源碼中完整的表達, 可以將光標移到你想要看的tag上, 然后按下空格鍵, 在下面的命令欄中, 如圖下邊含“=0”字樣的方框, 會顯示該tag在源碼中完整的寫法, 而不會跳轉到源碼處.
       TagList插件我就介紹到這里, 其實它還有很多用法和設置, 我沒法一一地教你了, 好在TagList有一份詳細的幫助手冊 taglist.txt, 有時間好好鑽研下吧 : )

       5、文件瀏覽和窗口管理器--插件:WinManager
下載地址 http://www.vim.org/s/.php?_id=95
版本 2.x
手冊 :help winmanager

       當我們打開vi,執行命令 “:e ~/download/anjuta-2.4.0/src/”時,可以看到如下的畫面,

500)this.width=500;">

     可以發現,會顯示我的路徑“~/download/anjuta-2.4.0/src/”下的文件目錄,這個功能就是由vi默認的以安裝的插件netrw.vim實現的,
在該界面上你可以用下面的一些命令來進行常用的目錄和文件操作:

<F1> 顯示幫助
<cr> 如果光標下是目錄, 則進入該目錄; 如果光標下文件, 則打開該文件
- 返回上級目錄
c 切換vim 當前工作目錄正在瀏覽的目錄
d 創建目錄
D 刪除目錄或文件
i 切換顯示方式
R 文件或目錄重命名
s 選擇排序方式
x 定制瀏覽方式, 使用你指定的程序打開該文件


         我這里不是教你怎么用netrw.vim插件, 而是要教你通過WinManager插件來將TagList窗口和netrw窗口整合起來,在文件/etc/vim/vimrc中加入下面的兩句配置:

let g:winManagerWindowLayout='FileExplorer|TagList'
nmap wm :WMToggle<cr>

我打開~/download/anjuta-2.4.0/src/目錄下的main.c的源文件,在normal狀態下輸入"wm",可以看到如下:

500)this.width=500;">

           其中左上邊是netrw窗口, 左下邊是TagList窗口, 當再次輸入"wm"命令時這兩個窗口又關閉了.

         WinManager的功能主要就是我介紹的這些, 但是它還有其他一些高級功能, 還可以支持其他幾個插件, 如果你覺得我介紹的還不夠你用, 建議你把它的幫助手冊好好研究一下,就是插件壓縮包中doc里的文件。

  6、Cscope的使用:

       這下更厲害了, 用Cscope自己的話說 - "你可以把它當做是超過頻的ctags", 其功能和強大程度可見一斑吧, 關於它的介紹我就不詳細說了, 如果你安裝好了前文介紹的中文幫助手冊, 用下面的命令看看介紹吧:

:help if_cscop.txt

      我在這里簡單摘抄一點, 供還在猶豫的朋友看看:
Cscope 是一個交互式的屏幕下使用的工具,用來幫助你:
* 無須在厚厚的程序清單中翻來翻去就可以認識一個 C 程序的工作原理。
* 無須熟悉整個程序就可以知道清楚程序 bug 所要修改的代碼位置。
* 檢查提議的改動 (如添加一個枚舉值) 可能會產生的效果。
* 驗證所有的源文件都已經作了需要的修改;例如給某一個現存的函數添加一個參數。
* 在所有相關的源文件中對一個全局變量改名。
* 在所有相關的位置將一個常數改為一個預處理符號。

它被設計用來回答以下的問題:
* 什么地方用到了這個符號?
* 這是在什么地方定義的?
* 這個變量在哪里被賦值?
* 這個全局符號的定義在哪里?
* 這個函數在源文件中的哪個地方?
* 哪些函數調用了這個函數?
* 這個函數調用了哪些函數?
* 信息 "out of space" 從哪來?
* 這個源文件在整個目錄結構中處於什么位置?
* 哪些文件包含這個頭文件?

下載地址 http://cscope.sourceforge.net
版本 15.x

     安裝和往常一樣,解壓-》“./configure”“make”“make install”,這些都需要root權限。
在/etc/vim/vimrc增加以下設置:

:set cscopequickfix=s-,c-,d-,i-,t-,e-    

這個是設定是否使用 quickfix 窗口來顯示 cscope 結果, 用法在后面會說到。
跟Ctags一樣, 要使用其功能必須先為你的代碼生成一個cscope的數據庫, 比如我的項目在“~/download/anjuta-2.4.0”,則在該目錄下運行下面的命令:

$ sudo cscope -Rbq
# 此后會生成三個文件
$ ls -l cscope.*
-rw-r--r-- 1 root root 1318912 2008-03-26 21:18 cscope.in.out
-rw-r--r-- 1 root root 7843983 2008-03-26 21:18 cscope.out
-rw-r--r-- 1 root root 5553000 2008-03-26 21:18 cscope.po.out
# 打開文件, 開始Coding
$ cd src
$ vi main.c

進入vim后第一件事是要把剛才生成的cscope文件導入到vim中來, 用下面的命令:

:cs add ~/download/anjuta-2.4.0/cscope.out ~/download/anjuta-2.4.0

上面這條命令很重要, 必須寫全, 不能只寫前半句:
:cs add ~/download/anjuta-2.4.0/cscope.out
因為源碼是多級目錄的, 如果這樣寫, cscope是無法在子目錄中的源碼中工作的, 當然, 如果你的源碼都在同一級目錄中就無所謂了. 如果你要經常用cscope的話, 可以把上面那句加到vimrc中去.
下面我們來操練一下, 查找函數vim_strsave()的定義, 用命令:

:cs find g get_real_path

如下圖:

500)this.width=500;">

按下回車后會自動跳轉到get_real_path()的定義處. 此時你肯定會說Ctags也可以做到這個呀, 那么下面說的這個Ctags就無法做到了, 我想查找get_real_path()到底在那些地方被調用過了, 用命令:

:cs find c get_real_path

按下回車后vim會自動跳轉到第一個符合要求的地方, 並且在命令欄顯示有多少符合要求的結果, 如圖:

500)this.width=500;">

如果自動跳轉的位置你不滿意, 想看其他的結果, 可以用下面的命令打開QuickFix窗口:

:cw

如圖:

500)this.width=500;">

這時你就可以慢慢挑選了^_^(當然,這里只有一處調用了。。。舉例不當,哈哈)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM