天天看點

在window7下使用vi + ctags + cscope + taglist

1)安裝cygwin+ctags+cscope

下載下傳setup.exe,以管理者身份運作;

搜尋vim, ctags, cscope,選中,taglist沒有,後續自己單獨下載下傳;

安裝完成後,桌面上的cygwin terminal好像不能用;

找到C:\cygwin\Cygwin批處理檔案,運作就能打開終端;

注:我後來又重裝了一次,這次桌面上的cygwin terminal快捷鍵是可用的,看來前幾次安裝就是出了問題。

2)找到vi的配置檔案:

運作vi,:echo $VIM 可以檢視VIM的安裝目錄,我的安裝目錄是/usr/share/vim,對應window的C:\cygwin\usr\share\vim,其實我的安裝目錄下還有一級vim73目錄,的配置檔案模闆就是/usr/share/vim/vim73/vimrc_example.vim,打開它,有段說明,按照說明将這個vimrc_example.vim複制成~/.vimrc檔案,這個就是vi的配置檔案了。

3)配置ctags

cd到代碼目錄

ctags -R *

生成tags檔案;

告訴vi tags索引檔案的位置:

在~/.vimrc中加入一行:

set tags=<tags file path>

例如:

set tags=~/linux-0.11/tags

重新開機vi之後,你現在可以使用Ctrl+]跳轉了,把光标放到某個函數調用上,試試看。

4)安裝taglist

到官網下載下傳taglsit,是一個壓縮包,解壓後會看到兩個檔案夾:plugin和doc,把這兩個檔案夾裡的内容複制到vi已有的對應目錄:/usr/share/vim/vim73/plugin和/usr/share/vim/vim73/doc

重新開機vi,taglist就自動生效了,在vi中輸入指令:Tlist,你就會看到Taglist視窗出現了。

5)配置cscope

在vi中使用cs指令的時候,vi預設尋找cscope可執行程式,可是我們在安裝cygwin的時候裝的是mlcscope,是以我們需要做個連結:

cd /usr/bin

ln -s mlcscope cscope

cd到代碼目錄,搜尋所有你感興趣的檔案,例如:

find -name "*.s" -o -name "*.c" > file_list.cs

生成cscope索引檔案

cscope -Rbkq -i file_list.cs

告訴vi cscope索引檔案的位置:

在~/.vimrc中加入一行:

cs add <cscope.out path> <pre_path>,例如:

cs add ~/linux-0.11/cscope.out ~/linux-0.11/

<pre_path>是cscope在使用索引檔案查找源碼檔案時候的基準位置; 比如cscope.out裡面記錄了一個init/main.c檔案,cs在找這個檔案的時候就知道從~/linux-0.11為基準找int/main,也就是說cs會找~/linux-0.11/init/main.c檔案;

如果你在生成cscope.out索引檔案的時候使用了-P參數,則索引檔案裡就已經記錄了每個源碼檔案的絕對路徑,于是你在使用cs add加載資料庫的時候就不需要再制定<pre_path>了;

好了,現在可以在vi中使用cs搜尋代碼了,試試:cs f g foo查找foo的定義;

6) 為了讓vi更好用,在.vimrc檔案中加入這麼幾行:

" add by mayq

" set tag database

set tags=~/linux-0.11/tags

" set cscope database

cs add ~/linux-0.11/cscope.out ~/linux-0.11/

" show line number

set nu

" set current line hightlight, forground color=white, backgournd color=dark

" red

set cursorline

hi CursorLine cterm=NONE ctermbg=darkred ctermfg=white

hi CursorColumn cterm=NONE ctermbg=darkred ctermfg=white

" taglist setting

let Tlist_Use_LEFT_Window=1

let Tlist_File_Fold_Auto_Close=1

let Tlist_Show_One_File=1

let Tlist_GainFocus_On_ToggleOpen=1

let Tlist_Exit_OnlyWindow=1

let Tlist_Auto_Open=1

nmap tl :Tlist<cr>

" end mayq