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

來源:互聯網
上載者:User

      有人抱怨Linux系統下沒有類似於VC之類的方便快捷的編輯器,有人用gedit,有人用vim,但是都不方便而且也沒有自動補全之類的方便使用者的功能。本文簡單介紹使用vim中的幾個外掛程式(Ctags、Cscope和TagList)實現一個強大的編輯器,希望可以協助您學習、使用。 一、軟體安裝

Ubuntu給我們安裝軟體提供了很大的便利,比如說,安裝vim我們可以直接使用"sudo apt-get install vim"即可安裝!

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


對於Taglist使用這個方法安裝不了,我們需要先下載,然後安裝完成:

首先上網下載Taglist外掛程式,下載完成後解壓,再將檔案下的taglist.vim使用cp命令拷貝到HOME/.vim/plugin檔案夾下(cp -r taglist.vim ~/.vim/plugin)

這樣,vim+Taglist+cscope+ctags四種工具我們是安裝好了,但是如何使用呢?


二、Vim簡介及配置

vim是一個非常好用的編輯工具,以下介紹幾個常用的底行模式命令:

(1). 設定縮排

     :set    smartindent      // 設定縮排

      :set smartindent shiftwidth=4      // C語言自動縮排,縮排值為4個字元寬度

(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檔案的配置資訊:

"顯示行號    "set number "或者set  numap <F5> <Esc>:set nu<CR>   "映射F5顯示行號,參考"vim 按鍵映射"(http://www.pythonclub.org/vim/map-basic)map <C-F5> <Esc>:set nonu<CR>   "映射Ctrl+F5為不顯示行號"檢測檔案的類型    filetype on"記錄曆史的行數    set history=1000"自動對齊    set autoindentset cindent"智能選擇對齊    set smartindent"tab為4個空格    set tabstop=4"當前行之間交錯時使用4個空格    set shiftwidth=4"設定匹配模式,輸入做括弧會出現右括弧    set showmatch"編輯時顯示光線標狀態    set ruler"高亮尋找  set hlsearch"粘貼插入set paste"快速匹配    set incsearch"修改檔案自動備份    if has("vms")    set nobackupelse    set backupendif"""""""""""""設定開啟ctags"""""""""""""   map <F4> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR>"第一個命令裡的分號是必不可少的。這個命令讓vim首先在目前的目錄裡尋找tags檔案,如果沒有找到tags檔案,或者沒有找到對應的目標,就到父目錄 中尋找,一直向上遞迴。因為tags檔案中記錄的>路徑總是相對於tags檔案所在的路徑,所以要使用第二個設定項來改變vim的目前的目錄。 set tags=tags;set autochdir"絕對路徑"set tags=/home/long/workstation/ganguio/uio-8139d-driver/V7/tags,/home/long/linux-3.7.3/drivers/uio/tags"""""""""""""""""Taglist設定"""""""""""""""""         map <F3> : Tlist<CR>  ""按下F3就可以呼出了"let Tlist_Auto_Open = 1  "在啟動VIM後,自動開啟taglist視窗let Tlist_Ctags_Cmd = '/usr/bin/ctags'  "設定ctags的位置let Tlist_Use_Right_Window=0 " 1為讓視窗顯示在右邊,0為顯示在左邊let Tlist_Show_One_File=0 "讓taglist可以同時展示多個檔案的函數列表,設定為1時不同時顯示>多個檔案的tag,只顯示當前檔案的let Tlist_File_Fold_Auto_Close=1 "同時顯示多個檔案中的tag時,taglist只顯示當前檔案tag,>其他檔案的函數列表摺疊隱藏let Tlist_Exit_OnlyWindow=1 "當taglist是最後一個分割視窗時,自動結束vim"let Tlist_Use_SingleClick= 1    " 預設情況下,在雙擊一個tag時,才會跳到該tag定義的位置"let Tlist_Process_File_Always=0  "是否一直處理tags.1:處理;0:不處理"""""""""""""""""""""""cscope設定""""""""""""""""""    set cscopequickfix=s-,c-,d-,i-,t-,e-  if has("cscope")  set csprg=/usr/bin/cscope  set csto=1  set cst  set nocsverb  " add any database in current directory   if filereadable("cscope.out")     cs add cscope.out  endif  set csverb  endif  nmap <C-@>s :cs find s <C-R>=expand("<cword>")<CR><CR>nmap <C-@>g :cs find g <C-R>=expand("<cword>")<CR><CR>nmap <C-@>c :cs find c <C-R>=expand("<cword>")<CR><CR>nmap <C-@>t :cs find t <C-R>=expand("<cword>")<CR><CR>nmap <C-@>e :cs find e <C-R>=expand("<cword>")<CR><CR>nmap <C-@>f :cs find f <C-R>=expand("<cfile>")<CR><CR>nmap <C-@>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>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、前面申明過的變數或者函數名的補全;2、結構體等自建結構的補全;3、STL等標準庫的補全;4、括弧、引號等自動匹配補全。

對於第一種情況,寫程式的過程中,直接用CTRL+p即可選擇,對於第二種情況,如果想申明了結構體T,想在輸入T.時彈出成員供選擇,只需在用之前按一下:CTRL+F12,然後效果如圖:


三、TagList外掛程式簡述及使用

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

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

TlistClose關閉標籤列表視窗

TlistToggle切換標籤列表視窗狀態(開啟←→關閉),標籤列表視窗是否獲得焦點取決於其他配置

ctl-w+w或ctl-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:關閉協助


四、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) ---此命令不常用,可以不用記

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

7.Ctrl+ 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檔案,開啟查詢,如果還是找不到...哼哼,我也沒轍了。 五、Cscope外掛程式簡介及使用

Cscope是一個類似ctags的工具。 你可以把它想作是超過頻的ctags,因為它功能比ctags強大很多。 在Vim裡,通過cscope查詢結果來跳轉就象跳轉到其他的標籤完全一樣;它被儲存在標籤棧裡。這樣你就可以象使用tags一樣在函數等等之間便捷的跳轉。在VIM中使用cscope非常簡單:

首先在目錄下使用“cscope -kqb”產生cscope.out檔案;

使用時先在VIM的命令列下調用“cscope add/../../cscope.out”(或cs add /../../cscope.out)命令添加一個

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.