1. 程式人生 > >vim下的ctags和taglist等的使用和配置

vim下的ctags和taglist等的使用和配置

1.ctags

(1)到 http://prdownloads.sourceforge.net/ctags/ctags-5.6.tar.gz

        下載ctags原始碼ctags-5.6.tar.gz

(2)解壓並安裝

假設在家目錄下taogle使用者的目錄下:
tar zxvf ctags-5.6.tar.gz
cd ctags-5.6
./configure && make && make install

(3)使用

<1> 對於一個工程資料夾如:cd  /home/taogle/vimPlungTest/src

<2> 建立ctags檔案,在該目錄下執行 ctags -R  

        —— "-R"表示遞迴建立,也就包括原始碼根目錄下的任何子目錄下的源程式(如果你的原始碼是多層的目錄, 就去最上層的目錄)。從而在src目錄下建立了一個“tags”檔案,"tags"文件中包括這些物件的列表。

如果修改程式後,比如增加了函式定義,刪除了變數定義,tags檔案不能自動rebuild,必須再次在當前"tags"檔案所在的目錄下執行 $ctags -R

l 用#define定義的巨集
l 列舉型變數的值
l 函式的定義、原型和宣告
l 名字空間(namespace)
l 型別定義(typedefs)
l 變數(包括定義和宣告)
l 類(class)、結構(struct)、列舉型別(enum)和聯合(union)
l 類、結構和聯合中成員變數或函式
VIM用這個"tags"文件來定位上面這些做了標記的物件

注意:

執行vim的時候,必須在"tags"文件所在的目錄下執行。否則,對於該例子還要在執行vim的時,用  " :set tags= /home/taogle/vimPlungTest/src " 命令來設定"tags"文件的路徑,這樣vim才能找到"tags"文件。

如果經常在這個工程程式設計的話,可以將 " set tags= /home/taogle/vimPlungTest/src "這句話寫進~/.vimrc 檔案中去直接作為vim的配置檔案。當然這個路徑隨著工程目錄的變化要隨時作調整。(切記tags後面的"="一定不能有空格,否則vim會報 E518錯誤

)

強烈推薦以下的方法:在vimrc中加入以下的句子:

        if getfsize("vimscript")>0

                    source   vimscript

        endif

然後在工程tags檔案所在的目錄下(如:" /home/taogle/vimPlungTest/src" )新建一個叫做“vimscript”的檔案,在檔案中新增以下的內容:

     set tags= /home/taogle/vimPlungTest/src    "或者 /home/taogle/vimPlungTest/src/tags

     set tags+= /home/taogle/vimPlungTest/src/tags.lib  "這一句通常可以沒有

這樣每次啟動vim就會自動執行vimscript指令碼中的句子,從而可以自動找到tags所在的目錄。

並在vimscript檔案中加入如下一行就可實現在vim中每次開啟vim編輯時都重新生成關於c++的tags檔案:

   ! ctags -R --c++-kinds=+p --fields=+iaS --extra=+q --language-force=c++

      ——  ! command   //實現在vim中執行shell

或者為了更加簡單 ,在vimrc中新增以下的句子,就可以在進入vim後,按下Ctrl+F12組合鍵(每當有程式碼更新的時候,時不時按下以更新tags),在當前目錄下尋找所有的c/c++檔案,從而在當前目錄下建立tags檔案:

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

快捷鍵:

<1>     把游標移到變數名或函式名上,然後按下"Ctrl-]"。用"Ctrl-o"或“Ctrl-t”退回原來的地方。
<2>     在函式中移動游標
[{     轉到上一個位於第一列的"{"
}]     轉到下一個位於第一列的"{"
{      轉到上一個空行
}      轉到下一個空行 ([ and ] 也分別是兩個指令)
gd   轉到當前游標所指的區域性變數的定義
*      轉到當前游標所指的單詞下一次出現的地方
#     轉到當前游標所指的單詞上一次出現的地方

2. taglist

taglist的功能是即時生成當前檔案的函式列表和全域性變數列表,便於索引。 能夠列出源文件中的tag(function, class, variable, etc)並跳轉.

注意:taglist依賴於ctags,所以要先裝ctags,否則taglist裝了也沒法用!

(1) 在http://vim.sourceforge.net/scripts/download_script.php?src_id=6416 下載得到 taglist_42.zip


(2)解壓得到兩個文件(假設在zip檔案在/home/taogle資料夾下)

cd /home/taogle

$ unzip -d taglist taglist_42.zip
$ cd taglist
$ tree


.
|-- doc
| `-- taglist.txt
`-- plugin
`-- taglist.vim   

(3)安裝
cp doc/taglist.txt    /usr/share/vim/vim72/doc/                 
--taglist 幫助檔案
cp plugin/taglist.vim   /usr/share/vim/vim72/plugin/        -- taglist 外掛

(4)配置和使用

啟動vim,可使用 “:helptags .”來配置好幫助檔案,並能夠用來檢視;

重啟vim,用“:TlistToggle”來開啟和關閉taglist視窗。

在 /usr/share/vim/中的檔案vimrc中新增關於taglist的常用配置命令如下:

==============================

let Tlist_Ctags_Cmd = '/usr/bin/ctags'   "設定Linux系統中ctags程式的位置
let Tlist_Show_One_File=1    "不同時顯示多個檔案的tag,只顯示當前檔案的
let Tlist_Exit_OnlyWindow=1  "如果taglist視窗是最後一個視窗,則退出vim
let Tlist_Use_Right_Window = 1         "在右側視窗中顯示taglist視窗
"let Tlist_Use_SingleClick= 1    " 預設情況下,在雙擊一個tag時,才會跳到該tag定義的位置

let Tlist_Auto_Open=1    "在啟動VIM後,自動開啟taglist視窗
let Tlist_Process_File_Always=1  "taglist始終解析檔案中的tag,不管taglist視窗有沒有開啟

let Tlist_File_Fold_Auto_Close=1 "同時顯示多個檔案中的tag時,可使taglist只顯示當前檔案tag,其它檔案的tag都被摺疊起來

==============================

(5)使用

<1> 切換函式列表的開、關

==> 或者使用  “:TlistToggle” 在開啟和關閉間切換

     ==> 可以用 “:TlistOpen” 開啟taglist視窗,用“:TlistClose”關閉taglist視窗。

     ==> 在vimrc中使用如下面的對映,就可以使用 “,tl”  鍵就可以開啟/關閉taglist視窗:

map <silent> <leader>tl :TlistToogle<cr>



<2> 在正常編輯區域和tags區域中切換
      ctrl+w+w

<3> 定位指定內容
在tags區域中,把游標移動到變數、函式名稱上,然後敲回車(或者是雙擊某個tag),就會自動在正常編輯區域中定位到指定內容了。

在taglist視窗中,可以使用下面的快捷鍵


<CR>            跳到游標下tag所定義的位置,用滑鼠雙擊此tag功能也一樣
o                    在一個新開啟的視窗中顯示游標下tag
<Space>   (空格)顯示游標下的tag的原型定義,在vim
u                    更新taglist視窗中的tag
s                    更改排序方式,在按名字排序和按出現順序排序間切換
x                    taglist視窗放大和縮小,方便檢視較長的tag
+                    開啟一個摺疊,同zo
-                    將tag摺疊起來,同zc
*                    開啟所有的摺疊,同zR
=                   將所有tag摺疊起來,同zM
[[                   跳到前一個檔案
]]                   跳到後一個檔案
q                  關閉taglist視窗
<F1>          顯示幫助

Taglist外掛還提供了很多Ex命令,甚至可以用這些命令建立一個taglist的會話,然後在下次進入VIM時載入此會話。

Taglist外掛還可以與winmanager外掛協同使用。

3.  omnicppcomplete 外掛(讓vim支援程式碼自動補全)

軟體:ctags

ctags一般系統預設就有。

假設在家目錄下存在.vim資料夾, 如:     /home/taogle/.vim,如果不存在,在家目錄下建立.vim目錄;然後使用以下的命令:

            unzip omnicppcomplete-0.41.zip   -d    /home/taogle/.vim (或者使用:$HOME/.vim)

從而在 /home/taogle/.vim下面解壓出after、autoload、doc三個資料夾。至此 omnicppcomplete的安裝已經完成。

千萬要注意 :在unzip前面不能加sudo,否則會使得解壓出的三個資料夾屬性為不可寫(no write),從而造成 omnicppcomplete的不可用,關於此,筆者有慘痛的教訓見以下的帖子:

   http://forum.ubuntu.com.cn/viewtopic.php?f=68&t=290726&p=2034064&sid=623c81b6d292d6759a991099b3ebfb24#p2034064

再執行vim,然後在vim的命令模式下輸入 :helptags $HOME/.vim/doc ,這樣可以新增omnicppcomplete的幫助檔案到vim。

你可以繼續輸入:h omnicppcomplete來檢視外掛提供的文件,裡邊有安裝和使用的所用方法。

在你的vim配置檔案(~/.vimrc,沒有可以新新增一個)加上以下幾句:

set nocp
filetype plugin on

//可選項

set completeopt=longest,menu
set completeopt=menuone

使用方法:

omnicppcomplete主要依賴ctags生成的tags檔案來判斷補全的,所以首先應該生成一定的資訊。也就是說應該先把類寫好,然後再生成tags,以後出現物件的 ”.” 或 ”->”成員操作時它自動尋找成員函式。

在vim編輯檔案時按Ctrl+F12,ctags會把這個檔案所在目錄以及子目錄的所有檔案資訊收集生成一個名為tags的檔案存在當前編輯檔案 所在目錄。然後就可以實現程式碼自動補全咯。 在~/.vimrc中新增的 map…… 那句巨集就實現這個功能。注意,如果要讓新編寫的檔案可以使用則需先寫入,命令為 :w

如果在補全時受不了[預覽]視窗的打擾可以開啟vim配置檔案加入

set completeopt=menu

4.NERD_commenter.vim

註釋外掛,用來註釋掉程式碼的工具,支援“//”、“/* */”兩種程式碼註釋方式。

               下載外掛

安裝很簡單,將解壓的doc檔案放在vimfile/doc下,另一個vim檔案放在vimfile/plugin下面……

也是程式設計師非常實用的一款外掛,支援各種語言的補全,只要你能想到的,放心他絕對註釋的了,而且還支援單行註釋,批量註釋,等各種命令對映,在這裡,我把最常用的鍵對映在vimrc中配置了一下。

"對NERD_commenter的設定
let NERDShutUp=1
      "支援單行和多行的選擇,//格式
map <c-h> ,c<space>

這樣的話,在游標所在行上,按下一次ctrl+h是註釋,再按下一次是取消註釋。

而其內建的指令,cm是多行註釋,類似C++的/**/,,cu是取消註釋。

其他的命令:

在Normal或者Visual 模式下:

    * ,ca,在可選的註釋方式之間切換,比如C/C++ 的塊註釋/* */和行註釋//
    * ,cc,註釋當前行
    * ,c,切換註釋/非註釋狀態
    * ,cs,以”性感”的方式註釋
    * ,cA,在當前行尾添加註釋符,並進入Insert模式
    * ,cu,取消註釋
    * Normal模式下,幾乎所有命令前面都可以指定行數
    * Visual模式下執行命令,會對選中的特定區塊進行註釋/反註釋

5.DoxygenToolkit.vim 由註釋生成文件,並且能夠快速生成函式標準註釋 

下載地址

安裝:將下載的DoxygenToolkit.vim直接放在vimfile/plugin資料夾下面……

配置:

map fg : Dox<cr> map fn: DoxAuthor<cr> map fl: DoxLic<cr>
let g:DoxygenToolkit_authorName="Taogle"
let g:DoxygenToolkit_licenseTag="My own license/<enter>"
let g:DoxygenToolkit_undocTag="DOXIGEN_SKIP_BLOCK"
let g:DoxygenToolkit_briefTag_pre = "@brief/t"
let g:DoxygenToolkit_paramTag_pre = "@param/t"
let g:DoxygenToolkit_returnTag = "@return/t"
let g:DoxygenToolkit_briefTag_funcName = "no"
let g:DoxygenToolkit_maxFunctionProtoLines = 30

這樣在vim的normal模式下,將游標放到檔案的頭部,按下fn就會對檔案加上文件註釋

將游標放到函式的定義的前面一行,按下fg就會對函式進行註釋

按下fl,進行授權註釋

6.a.vim .cpp和.h檔案快速切換

 下載地址

把下載的a.vim放到plugin下,不需要配置。

直接可以:A,開啟.cpp和.h對應的檔案,:AV,開啟.cpp和.h對應的檔案,並且分屏顯示

或者在vimrc中寫下如下的對映,快捷鍵對映

map av : AV<cr>        (最常用)

還有其他的幾個命令如下:

:A   switches to the header file corresponding to the current file being edited (or vise versa)
:AS   splits and switches
:AV   vertical splits and switches
:AT   new tab and switches
:AN   cycles through matches
:IH     switches to file under cursor
:IHS  splits and switches
:IHV  vertical splits and switches
:IHT  new tab and switches
:IHN  cycles through matches

因為這個外掛都依賴於ctags管理的tags資料,所以新編輯的內容不會立即起效。所以應該時不時按下Ctrl-F12更新tags。

7. AddCppClass: 幫助你快速新增一個C++類

http://www.vim.org/scripts/script.php?script_id=2986

安裝方法同4.NERD_commenter

可以在vimrc中設定快捷鍵

map cs : AddCppClass<cr>

從而在使用時,在normal模式下按下cs就可以提示新增一個類……

8.grep.vim,在工程中快速查詢
下載: http://www.vim.org/scripts/script.php?script_id=311
安裝方法同6. a.vim

常用命令--> :Grep

但是這個外掛挺難用的,只能慢慢摸索著用了