Ubuntu下建立vim+Taglist+cscope+ctags組合編輯器

有人抱怨Linux系統下沒有相似於VC之類的方便快捷的編輯器,有人用gedit, 有人用vim,可是都不方便並且也沒有自動補全之類的方便用戶的功能。本文簡單介紹使用vim中的幾個插件(Ctags、Cscope和TagList) 實現一個強大的編輯器,但願能夠幫助您學習、使用。php

1、軟件安裝

Ubuntu給咱們安裝軟件提供了很大的便利,好比說,安裝vim咱們能夠直接使用"sudo apt-get install vim"便可安裝!html

一樣,cscope和ctags也可使用相同方法安裝,這是多麼暢快淋漓啊!感謝Ubuntu給咱們用戶如此便利!
python


對於Taglist使用這個方法安裝不了,咱們須要先下載,而後安裝完成:linux

首先上網下載Taglist插件,下載完成後解壓,再將文件下的taglist.vim使用cp命令拷貝到HOME/.vim/plugin文件夾下(cp -r taglist.vim ~/.vim/plugin)c++


這樣,vim+Taglist+cscope+ctags四種工具咱們是安裝好了,可是如何使用呢?程序員


2、Vim簡介及配置

vim是一個很是好用的編輯工具,如下介紹幾個經常使用的底行模式命令:正則表達式

(1). 設置縮進數據庫

     :set    smartindent      // 設置縮進ubuntu

      :set smartindent shiftwidth=4      // C語言自動縮進,縮進值爲4個字符寬度vim

(2). 顯示光標行列信息

      :set ruler             // 顯示光標信息(右下角)

(3). 查看製表符

      :set list               // 顯示製表符,以^符號顯示製表符的位置

(4). 查看行數信息

     :set number        //顯示行號(左邊)

(5). 關鍵字高亮

    :syntax on                  //關鍵字高亮

(6).  多文件編輯 ,在編寫程序時有可能須要同時編輯多個文件,在這種狀況下,須要以下設置

    : split two.c             //  多文件編輯


固然,若是不嫌麻煩,能夠在每次打開Vim時 輸入如上命令,如我常常用的是:set  number :set ruler :syntax on :set smartindent  命令,若是將平時在底行模式下輸入的命令直接寫入配置文件,則之後使用Vim時不用再次輸入這些命令。

首先,試着在Vi的底行模式下輸入以下命令,若是不支持的話,去下載一個Vim的全版本,sudo apt-get install vim-full。

如下是修改配置文件的方法:

(1). 找到Vimrc文件。

(2) 查看文件的權限:

zhouyl@ubuntu :~$ cd /etc/vim
zhouyl@ubuntu :/etc/vim$ ls
vimrc   vimrc.tiny
zhouyl@ubuntu :/etc/vim$ ls -l vimrc
-rw-r--r-- 1 root root 3449  9月 11 17:30 vimrc

(3) 若是沒有寫權限的話,修改權限,使咱們能夠修改該配置文件

   sudo chmod a+w vimrc
 (4)根據我的須要將上訴命令寫入配置文件
       好比,我我的的設置是: syntax on , set ruler ,set number , set smartindent shiftwidth=4

下面貼上個人vimrc文件的配置信息:

[html] view plaincopy

  1. "顯示行號      

  2. "set number "或者set  nu  

  3. map <F5> <Esc>:set nu<CR>   "映射F5顯示行號,參考"vim 按鍵映射"(http://www.pythonclub.org/vim/map-basic)  

  4. map <C-F5> <Esc>:set nonu<CR>   "映射Ctrl+F5爲不顯示行號  

  5.   

  6. "檢測文件的類型      

  7. filetype on  

  8.   

  9. "記錄歷史的行數      

  10. set history=1000  

  11.   

  12. "自動對齊      

  13. set autoindent  

  14. set cindent  

  15.   

  16. "智能選擇對齊方式      

  17. set smartindent  

  18.   

  19. "tab爲4個空格      

  20. set tabstop=4  

  21.   

  22. "當前行之間交錯時使用4個空格      

  23. set shiftwidth=4  

  24.   

  25. "設置匹配模式,輸入作括號會出現右括號      

  26. set showmatch  

  27.   

  28. "編輯時顯示光標狀態      

  29. set ruler  

  30.   

  31. "高亮查找    

  32. set hlsearch  

  33.   

  34. "粘貼插入  

  35. set paste  

  36.   

  37. "快速匹配      

  38. set incsearch  

  39.   

  40. "修改文件自動備份      

  41. if has("vms")  

  42.     set nobackup  

  43. else  

  44.     set backup  

  45. endif  

  46. """""""""""""設置開啓ctags"""""""""""""     

  47. map <F4> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR>  

  48.   

  49. "第一個命令裏的分號是必不可少的。這個命令讓vim首先在當前目錄裏尋找tags文件,若是沒有找到  

  50. tags文件,或者沒有找到對應的目標,就到父目錄 中查找,一直向上遞歸。由於tags文件中記錄的>路徑老是相對於tags文件所在的路徑,因此要使用第二個設置項來改變vim的當前目錄。   

  51. set tags=tags;  

  52. set autochdir  

  53. "絕對路徑  

  54. "set tags=/home/long/workstation/ganguio/uio-8139d-driver/V7/tags,/home/long/linux-3.7.3/drivers/uio/tags  

  55.   

  56.   

  57. """""""""""""""""Taglist設置"""""""""""""""""           

  58. map <F3> : Tlist<CR>  ""按下F3就能夠呼出了  

  59. "let Tlist_Auto_Open = 1  "在啓動VIM後,自動打開taglist窗口  

  60. let Tlist_Ctags_Cmd = '/usr/bin/ctags'  "設定ctags的位置  

  61. let Tlist_Use_Right_Window=0 " 1爲讓窗口顯示在右邊,0爲顯示在左邊  

  62. let Tlist_Show_One_File=0 "讓taglist能夠同時展現多個文件的函數列表,設置爲1時不一樣時顯示>多個文件的tag,只顯示當前文件的  

  63. let Tlist_File_Fold_Auto_Close=1 "同時顯示多個文件中的tag時,taglist只顯示當前文件tag,>其餘文件的函數列表摺疊隱藏  

  64. let Tlist_Exit_OnlyWindow=1 "當taglist是最後一個分割窗口時,自動退出vim  

  65. "let Tlist_Use_SingleClick= 1    " 缺省狀況下,在雙擊一個tag時,纔會跳到該tag定義的位置  

  66. "let Tlist_Process_File_Always=0  "是否一直處理tags.1:處理;0:不處理  

  67.   

  68.   

  69.   

  70. """""""""""""""""""""""cscope設置""""""""""""""""""      

  71. set cscopequickfix=s-,c-,d-,i-,t-,e-    

  72. if has("cscope")    

  73. set csprg=/usr/bin/cscope    

  74. set csto=1    

  75. set cst    

  76. set nocsverb    

  77. " add any database in current directory     

  78. if filereadable("cscope.out")    

  79.    cs add cscope.out    

  80. endif    

  81. set csverb    

  82. endif    

  83.   

  84. nmap <C-@>s :cs find s <C-R>=expand("<cword>")<CR><CR>  

  85. nmap <C-@>g :cs find g <C-R>=expand("<cword>")<CR><CR>  

  86. nmap <C-@>c :cs find c <C-R>=expand("<cword>")<CR><CR>  

  87. nmap <C-@>t :cs find t <C-R>=expand("<cword>")<CR><CR>  

  88. nmap <C-@>e :cs find e <C-R>=expand("<cword>")<CR><CR>  

  89. nmap <C-@>f :cs find f <C-R>=expand("<cfile>")<CR><CR>  

  90. nmap <C-@>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>  

  91. nmap <C-@>d :cs find d <C-R>=expand("<cword>")<CR><CR>  


由於個人文檔中的原配置文件已經有了語法高亮:

" Vim5 and later versions support syntax highlighting. Uncommenting the next

" line enables syntax highlighting by default.

if has("syntax")

  syntax on

endif

因此我就沒寫了,您若是vimrc文件裏面沒有此項建議本身加上syntax on設置語法高亮


PS:在配置文件中"符號後的內容是註釋,並且在配置文件中是不須要添加符號的 ,這裏關於cscope、ctags和Taglist的設置能夠先寫上,後面將對這三個插件有介紹。好了,如今去開一個Vim,編輯一個程序看看,是否是感受很不通常呢?

好了,下面順便演示下,智能補全的用法,我分四種狀況:1、前面申明過的變量或者函數名的補全;二、結構體等自建結構的補全;三、STL等標準庫的補全;四、括號、引號等自動匹配補全。

對於第一種狀況,寫程序的過程當中,直接用CTRL+p便可選擇,對於第二種狀況,若是想申明告終構體T,想在輸入T.時彈出成員供選擇,只需在用以前按一下:CTRL+F12,而後效果如圖:


3、TagList插件簡述及使用

TagList插件,是一款基於ctags,在vim代碼窗口旁以分割窗口形式(如上圖所示)顯示當前的代碼結構概覽,增長代碼瀏覽的便利程度的vim插件.Vim中加載代碼文件後,可使用如下命令控制taglist:

TlistOpen(直接Tlist也可)打開並將輸入焦點至於標籤列表窗口,效果如上圖所示

TlistClose關閉標籤列表窗口

TlistToggle切換標籤列表窗口狀態(打開←→關閉),標籤列表窗口是否得到焦點取決於其餘配置

ctl-wwctl-w+  方向鍵窗口切換(taglist本質上是一個vim分隔窗口,所以可使用ctl-w系列快捷鍵對窗口進行切換操做)Taglist窗口主要有如下操做

F1:打開幫助回車鍵:跳到光標所在的標記的定義處(如將光標移到main函數,按回車鍵)

o:新建一個窗口,跳到標記定義處

p:預覽標記定義(仍然在taglist窗口)

空格:顯示標記的原型(如函數原型)

u:更新標記列表(好比源文件新增了一個函數,並在保存後,可在taglist窗口按u)

s:選擇排序字段(暫時我也不知道什麼意思)

d:刪除光標所在的taglist文件(如用vi打開了兩個文件f1.c,f2.c能夠刪除f1.c的標記)

x:n放大/縮小taglist窗口

+:展開(指標記)

-:摺疊

*:所有展開

=:所有摺疊

[[:將光標移到前一個文件的起點

]]:將光標移到後一個文件的起點

q:退出taglist窗口

F1:關閉幫助


4、Ctags插件簡介及使用

ctags使用簡介VIM簡單易用,你們只要看看VIM自帶的vitutor,大約只要20分鐘就能掌握VIM的用法,上面也簡單介紹了點vim的用法。可是對於Linux下的C/C++的程序員,使用VIM+Ctags的組合來寫程序也許是最佳的選擇。^_^儘管ctags也能夠支持其它編輯器,可是它正式支持的只有VIM。而且VIM中已經默認安裝了Ctags,它能夠幫助程序員很容易地瀏覽源代碼。熟練的使用ctags僅需記住下面七條命令:(很簡單吧,呵呵)

1$ctags –R * ($Linux系統Shell提示符)

2.$ vi –t tag (請把tag替換爲您欲查找的變量或函數名)

3:ts(ts助記字:tagslist,  「:」開頭的命令爲VI中命令行模式命令)

4:tp(tp助記字:tagspreview)---此命令不經常使用,能夠不用記

5:tn(tn助記字:tagsnext)  ---此命令不經常使用,能夠不用記

6Ctrl+ ]跳到光標所在函數或者結構體的定義處

7Ctrl+ T返回查找或跳轉

下面咱們逐條的解釋上面的命令:「$ctags –R*」:「-R」表示遞歸建立,也就包括源代碼根目錄(當前目錄)下的全部子目錄。「*」表示全部文件。這條命令會在當前目錄下產生一個「tags」文件,當用戶在當前目錄中運行vi時,會自動載入此tags文件。Tags文件中包括這些對象的列表:用#define定義的宏枚舉型變量的值函數的定義、原型和聲明名字空間(namespace)類型定義(typedefs)變量(包括定義和聲明)類(class)、結構(struct)、枚舉類型(enum)和聯合(union)類、結構和聯合中成員變量或函數VIM用這個「tags」文件來定位上面這些作了標記的對象。剩下的命令就是定位這些對象的方法:「$vi  –t tag」 :在運行vim的時候加上「-t」參數,例如:[/usr/src]$vim  -tmain這個命令將打開定義「main」(變量或函數或其它)的文件,並把光標定位到這一行。若是這個變量或函數有多處定義,在VI命令行模式「:ts」命令就能列出一個列表供用戶選擇。「:tp」爲上一個tag標記文件,「:tn」爲下一個tag標記文件。

固然,若當前tags文件中用戶所查找的變量或函數名只有一個,「:tp,:tn」命令不可用。

(最方便的方法是把光標移到變量名或函數名上,而後按下「Ctrl+]」,這樣就能直接跳到這個變量或函數定義的源文件中,並把光標定位到這一行。用「Ctrl+T」能夠退回原來的地方。即便用戶使用了N次「Ctrl+]」查找了N個變量,按N次「Ctrl+t」也能回到最初打開的文件,它會按原路返回  。 ^_^

注意:運行vim的時候,必須在「tags」文件所在的目錄下運行。不然,運行vim的時候還要用「:settags=」命令設定「tags」文件的路徑,這樣vim才能找到「tags」文件。在完成編碼時,能夠手工刪掉tags文件(帚把不到,灰塵不會本身跑掉^_^)。

有時候系統提示「找不到tag」時不要一味着急,有可能你想要查詢的函數時系統函數,若是這樣,那妳幸運勒,可使用Shift+K來查詢。若是不是沒也能夠本身找到tags文件,打開查詢,若是仍是找不到...哼哼,我也沒轍了!

5、Cscope插件簡介及使用

Cscope是一個相似ctags的工具。  你能夠把它想做是超過頻的ctags,由於它功能比ctags強大不少。 在Vim裏,經過cscope查詢結果來跳轉就象跳轉到其餘的標籤徹底同樣;它被保存在標籤棧裏。這樣你就能夠象使用tags同樣在函數等等之間便捷的跳轉。在VIM中使用cscope很是簡單:

首先在目錄下使用「cscope -kqb」生成cscope.out文件;

使用時先在VIM的命令行下調用「cscope add/../../cscope.out」(或cs add /../../cscope.out)命令添加一個cscope數據庫,而後就能夠調「cscope  find」(或 cs f )命令進行查找了。

VIM支持8cscope的查詢功能,以下:

c:Find functions calling this function//查找調用本函數的函數

d:Find functions called by this function //查找本函數調用的函數

e:Find this egrep pattern//查找egrep模式,至關於egrep功能,但查找速度快多了

f:Find this file //查找並打開文件,相似vimfind功能

g:Find this definition//查找函數、宏、枚舉等定義的位置,相似ctags的功能

i:Find files #including this file //查找包含本文件的文件

s:Find this C symbol //查找C語言符號,即查找函數名、宏、枚舉值等出現的地方

t:Find assignments to //查找指定的字符串

例如,咱們想在代碼中查找調用work()函數的函數,咱們能夠輸入:「:cs f c work」,回車後發現沒有找到匹配的功能,可能並無函數調用work()。咱們再輸入「:cs  f s work」,查找這個符號出現的位置,如今vim列出了這個符號出現的全部位置。咱們還能夠進行字符串查找,它會雙引號或單引號括起來的內容中查找。還能夠輸入一個正則表達式,這相似於egrep程序的功能。

cscope在vim命令行下還能夠執行下列操做

help: Show this message(Usage: help)

kill: Kill a connection(Usage: kill #)

reset:Reinit all connections(Usage: reset)

show: Show connections (Usage: show)


更詳細的Cscope用法見:http://blog.csdn.net/longerzone/article/details/7788010

相關文章
相關標籤/搜索