1. 程式人生 > >vim +ctags+ vimlist +scope 轉載

vim +ctags+ vimlist +scope 轉載


1.如何使用taglist外掛(plugin)。

想必用過Source Insight的人都記得這樣一個功能:SI能夠把當前檔案中的巨集、全域性變數、函式等tag顯示在Symbol視窗,用滑鼠點上述tag,就跳到該tag定義的位置;可以按字母序、該tag所屬的類或scope,以及該tag在檔案中出現的位置進行排序;如果切換到另外一個檔案,Symbol視窗更新顯示這個檔案中的tag。

在vim中的taglist外掛所實現的就是上述類似的功能,有些功能比SI弱,有些功能比SI更強。而且,taglist外掛還在不斷完善中!

要使用taglist plugin,必須滿足:

  • 開啟vim的檔案型別自動檢測功能:
    filetype on
  • 系統中裝了Exuberant ctags工具,並且taglist plugin能夠找到此工具(因為taglist需要呼叫它來生成tag檔案)
  • 你的vim支援system()呼叫

在文章vimrc初步中,我們使用了vim自帶的示例vimrc,這個vimrc中已經打開了檔案型別檢測功能;在上篇文章中,我們也已用到了Exuberant ctags;system()呼叫在一般的vim版本都會支援(suse Linux發行版中出於安全考慮,關閉了此功能),所以我們已經滿足了這三個條件。

下載後,把該檔案在~/.vim/目錄中解壓縮,這會在你的~/.vim/plugin和~/.vim/doc目錄中各放入一個檔案:

plugin/taglist.vim – taglist外掛
doc/taglist.txt    - taglist幫助檔案 

注:windows使用者需要把這個外掛解壓在你的$vim/vimfiles或$HOME/vimfiles目錄。

使用下面的命令生成幫助標籤(下面的操作在vim中進行):

:helptags ~/.vim/doc 

生成幫助標籤後,你就可以用下面的命令檢視taglist的幫助了:

:help taglist.txt 

Taglist提供了相當多的功能,我的vimrc中這樣配置:

""""""""""""""""""""""""""""""
" Tag list (ctags)
""""""""""""""""""""""""""""""
if MySys() == "windows"                "設定windows系統中ctags程式的位置
let Tlist_Ctags_Cmd = 'ctags'
elseif MySys() == "linux"              "設定linux系統中ctags程式的位置
let Tlist_Ctags_Cmd = '/usr/bin/ctags'
endif
let Tlist_Show_One_File = 1            "不同時顯示多個檔案的tag,只顯示當前檔案的
let Tlist_Exit_OnlyWindow = 1          "如果taglist視窗是最後一個視窗,則退出vim
let Tlist_Use_Right_Window = 1         "在右側視窗中顯示taglist視窗 

這樣配置後,當你輸入”:TlistOpen“時,顯示如下視窗:

在螢幕右側出現的就是taglist視窗,你從中可以看到在main.c檔案中定義的所有tag:巨集、定義、變數、函式等;你也可以雙擊某個tag,跳到該tag定義的位置;你還可以把某一類的tag摺疊起來(使用了vim的折行功能),方便檢視,就像上圖中macro和variable那樣。更多的功能,請檢視taglist的幫助頁,本文也會介紹一些常用功能。

下面介紹常用的taglist配置選項,你可以根據自己的習慣進行配置:

  • Tlist_Ctags_Cmd選項用於指定你的Exuberant ctags程式的位置,如果它沒在你PATH變數所定義的路徑中,需要使用此選項設定一下;
  • 如果你不想同時顯示多個檔案中的tag,設定Tlist_Show_One_File為1。預設為顯示多個檔案中的tag;
  • 設定Tlist_Sort_Type為”name“可以使taglist以tag名字進行排序,預設是按tag在檔案中出現的順序進行排序。按tag出現的範圍(即所屬的namespace或class)排序,已經加入taglist的TODO List,但尚未支援;
  • 如果你在想taglist視窗是最後一個視窗時退出vim,設定Tlist_Exit_OnlyWindow為1;
  • 如果你想taglist窗口出現在右側,設定Tlist_Use_Right_Window為1。預設顯示在左側。
  • 在gvim中,如果你想顯示taglist選單,設定Tlist_Show_Menu為1。你可以使用Tlist_Max_Submenu_ItemsTlist_Max_Tag_Length來控制選單條目數和所顯示tag名字的長度;
  • 預設情況下,在雙擊一個tag時,才會跳到該tag定義的位置,如果你想單擊tag就跳轉,設定Tlist_Use_SingleClick為1;
  • 如果你想在啟動vim後,自動開啟taglist視窗,設定Tlist_Auto_Open為1;
  • 如果你希望在選擇了tag後自動關閉taglist視窗,設定Tlist_Close_On_Select為1;
  • 當同時顯示多個檔案中的tag時,設定Tlist_File_Fold_Auto_Close為1,可使taglist只顯示當前檔案tag,其它檔案的tag都被摺疊起來。
  • 在使用:TlistToggle開啟taglist視窗時,如果希望輸入焦點在taglist視窗中,設定Tlist_GainFocus_On_ToggleOpen為1;
  • 如果希望taglist始終解析檔案中的tag,不管taglist視窗有沒有開啟,設定Tlist_Process_File_Always為1;
  • Tlist_WinHeightTlist_WinWidth可以設定taglist視窗的高度和寬度。Tlist_Use_Horiz_Window為1設定taglist視窗橫向顯示;

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

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

可以用”:TlistOpen“開啟taglist視窗,用”:TlistClose“關閉taglist視窗。或者使用”:TlistToggle“在開啟和關閉間切換。在我的vimrc中定義了下面的對映,使用<F9>鍵就可以開啟/關閉taglist視窗:

map <silent> <F9> :TlistToggle<cr> 

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

2.vimrc配置

~/.vimrc下面做如下配置:

set nocompatible

set number

syntax on

set showmatch

set incsearch

set background=dark

set ignorecase smartcase

set mouse=a

""""""""""

"Tag list

""""""""""

map <silent> <F9> :TlistToggle<CR>

let Tlist_Ctags_Cmd="/usr/local/bin/ctags"

let Tlist_Show_One_File=1

let Tlist_Exit_OnlyWindow=1

let Tlist_Use_Left_Window=1

let Tlist_File_Fold_Auto_Close=1 

3.scope

介紹完了ctags和taglist,下面該cscope出場了,其實cscope我也是剛用沒兩天的,沒仔細的看幫助,只是在幫助中看了一下如何啟用cscope和cscope的搜尋功能,其他的以後慢慢摸索.

由於taglist從目前我掌握的情況來看,我尚且不知道怎麼去查詢某個函式究竟在那些有地方呼叫,所以才找到了cscope.

1.首先開啟.vimrc檔案,新增如下內容(顯然沒有新增的話好像也是可以的,我就沒有新增,只是可能用的時候稍微的麻煩點)
用來設定是否使用 quickfix 視窗來顯示 cscope 結果"set cscopequickfix=s-,c-,d-,i-,t-,e-"2.同樣進入原始碼根目錄,執行

cscope -Rbkq這個命令會生成三個檔案:cscope.out, cscope.in.out, cscope.po.out。
其中cscope.out是基本的符號索引,後兩個檔案是使用”-q”選項生成的,可以加快cscope的索引速度。

上面所用到的命令引數,含義如下:

-R: 在生成索引檔案時,搜尋子目錄樹中的程式碼
-b: 
只生成索引檔案,不進入cscope的介面
-k: 
在生成索引檔案時,不搜尋/usr/include目錄
-q: 
生成cscope.in.out和cscope.po.out檔案,加快cscope的索引速3.完成了索引檔案的生成之後啟動vim  例如vim drivers/net/cs89x0.c 在命令模式下執行cs a cscope.out加入索引檔案,新增完畢後可以用cs s來察看是否有新增

2011年05月11日 - shenhao0129 - Camus

 表示有新增成功

注意:由於cscope是基於相對路徑的,可能存在找不到檔案的錯誤,需要使用絕對路徑方式來生成:cscope.out

在/usr/bin下新增如下指令碼gencscope.sh

#!/bin/bash

TARGET='/tmp/cscope.files'

find $1 -name "*.h" -o -name "*.cpp" > ${TARGET}

mycwd = `pwd`

cd $1

ctags -R *

cscope -bq -i ${TARGET}

cd ${mycwd}

如此只需要執行gencscopes  xxxx目錄即可


4.下面就可以在vim中進行實際演練操作了.

(1)把游標移到某個函式上,使用Ctrl+],就可以跳到函式的定義中.

(2)查詢某個函式的宣告和定義:

  :cs find g strcpy

(3)如果出現找出多個函式宣告和定義的情況,可以使用quickFix視窗進行選擇切換:

 :cw

其實我主要是用find,cscope find的用法:

cs find c|d|e|f|g|i|s|t name

0 或 s 查詢本 C 符號(可以跳過註釋)
1 或 g 查詢本定義
2 或 d 查詢本函式呼叫的函式
3 或 c 查詢呼叫本函式的函式
4 或 t 查詢本字串
6 或 e 查詢本 egrep 模式
7 或 f 查詢本檔案
8 或 i 查詢包含本檔案的檔案
當然如果每次輸入這麼長的命令肯定有人受不了, Cscope的幫助手冊中推薦了一些快捷鍵的用法, 下面是其中一組,雖然我個人暫時沒用,但還是貼出來,將下面的內容新增到~/.vimrc中, 並重啟vim:

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>

當游標停在某個你要查詢的詞上時, 按下<C-_>g, 就是查詢該物件的定義, 其他的同理.按這種組合鍵有一點技巧,按了<C-_>後要馬上按下一個鍵,否則螢幕一閃就回到nomal狀態了<C-_>g的按法是按"Ctrl+Shift+-", 然後很快再按"g"

如果想讓cscope以絕對路徑的形式進行載入的話:需要做以下操作(利用cscope.files檔案)

相關推薦

vim +ctags+ vimlist +scope 轉載

1.如何使用taglist外掛(plugin)。 想必用過Source Insight的人都記得這樣一個功能:SI能夠把當前檔案中的巨集、全域性變數、函式等tag顯示在Symbol視窗,用滑鼠點上述tag,就跳到該tag定義的位置;可以按字母序、該tag所屬的類或scope,以及該tag在檔案中出現的

vim - ctags

cal ctags script tps usr vim pytho scripts HA 1. apt-get install ctags 2. https://www.vim.org/scripts/script.php?script_id=790 https:/

VIM 常用操作(轉載

vi(vim)可以說是linux中用得最多的工具了,不管你配置服務也好,寫指令碼也好,總會用到它。但是,vim作為一個“純字元”模式下的工具,它的操作和WINDOWS中的文字編輯工具相比多少有些複雜。這裡,我根據自己個人的使用經驗,整理了一套vim的操作以及記憶的方法,希望對大家的學習有所幫助。

vim常用命令(轉載

關於Vim vim是我最喜歡的編輯器,也是linux下第二強大的編輯器。 雖然emacs是公認的世界第一,我認為使用emacs並沒有使用vi進行編輯來得高效。 如果是初學vi,執行一下vimtutor是個聰明的決定。 (如果你的系統環境不是中文,而你想使用中文的vimtut

vim+ctags

vim的配置檔案是/etc/vim/vimrc syntax on               //首先開啟語法高亮 set nu  

vim 學習筆記 (轉載

vim簡單使用教程 vim的學習曲線相當的大(參看各種文字編輯器的學習曲線),所以,如果你一開始看到的是一大堆VIM的命令分類,你一定會對這個編輯器失去興趣的。下面的文章翻譯自《Learn Vim Progressively》,我覺得這是給新手最好的VIM的升級

vim + ctags +escope + taglist 環境搭建

       閱讀原始碼的工具有很多,而且如今的整合開發環境(IDE)也很強大,但對於經常使用vim編輯器的程式設計師來說,對vim的強大絕對是“不拋棄,不放棄”的,況且我們只要安裝一些外掛配合vim的工作一樣能達到IDE的效果,好了,廢話少說。瀏覽了很多有關的網頁資源後,發

vim+ctags+taglist用法簡記

僅供自己備忘,未詳細整理。 http://blog.csdn.net/vaqeteart/archive/2009/05/03/4146618.aspx http://hi.baidu.com/qq520131714/blog/item/776488fb3451032

vim + ctags + taglist配置和使用 【及】 一鍵安裝 ctags和cscope的方法 【及】vim語法高亮,自動縮排,python 自動縮排設定

1, vim + ctags + taglist配置和使用 taglist依賴於ctags,所以要先裝ctags,否則taglist裝了也沒法用! 1、首先安裝ctags 首先是ctags的安裝,推薦使用exuberant ctags,我們可以從其官方網站上下載它的原始碼包

vim ctags cscope lookupfile外掛(包括如何自動生成索引tag、自動查詢索引tag)

  好長時間沒有上來更新了, 今天趁老闆不再上來休閒一下. 本章要說的是和vim的tags相關的內容. 之所以在跳轉之後就說明tags是因為這個功能相當的重要和實用. 好的東西自然是需要提前分享的.   首先, 要說的是關於vim使用ctags, cscope的相關教程

如何在Vim+Ctags+Taglist應用中新增自定義語言: systemverilog

確切的應該是轉載別人的,然後修改的: 如何在Vim+Ctags+Taglist應用中新增自定義語言  Vim+Ctags+Taglist的應用是一個非常方便的解決方案,網路上關於這樣的簡單介紹數不勝數,只要願意不妨搜尋一下即可。 但是有一個問題是大多數文章沒有闡明的,那就是

vim ctags 下 python 系統檔案定義的跳轉

THIS IS OUT DATED... PLEASE VISIT THE UPDATED POSThere!On Thursday, May 9th, 2008 the Utah Python User Group decided to settle the debate that has plagued

vim + ctags + taglist + cscope + cppcomplete + global 使用初探

各個工具的主要功能: vim:這個是Linux下功能十分強大的編輯器,就不說了。 ctags:生成tag檔案的命令,這個是其它工具的基礎。 taglist:需要ctags的支撐,直接在左邊列出函式列表,全域性引數列表。 cppcomplete:需要ctags的支撐,可以補全型別或者函式名。 cscope:比較

linux系統下用vim+ctags+cscope檢視原始碼

ctags 用於把關鍵字生成一個索引表,在vim裡可直接使用"ta 關鍵字"在索引表裡查詢並定位. cscope 也是生成索引表,在vim裡使用"cs xx xx xx "來查詢 如檢視ffmpeg-3.0的原始碼: 1). 在終端進入原始碼目錄,

vim + ctags + taglist配置和使用

通過tags 檔案來閱讀原始碼: tags 檔案是通過命令:ctags -R 生成索引檔案(原始碼目錄下所有的結構體定義,函式的定義,巨集定義 都可以通過索引檔案找到它所在的路徑檔案) ctags + ]  跳轉到指定符號所定義的檔案  ctags + t  返回  注

Linux 下閱讀原始碼工具(Vim + ctags+Cscope)

0. 寫在前面的廢話 開發環境遷移到了Ubuntu下,所有windows下好用的工具都要找個替代品。 windows下一直用 souce Insight 來閱讀原始碼,需要在Ubuntu下找個替代品。 上網看了看,貌似Vim + Ctags + Cscope不錯,安

vim 常用命令[轉載]

arc 打開 編輯模式 全屏 mman vim編輯 -c 填充 第一次 參考:http://www.cnblogs.com/usergaojie/p/4583796.html vi: Visual Interface 可視化接口vim: VI iMproved VI增強版

vim插件ctags的安裝與使用

tag ubunt 執行 子目錄 找到 解決 索引 linux date LINUX系統下看程序或者編程序時,看到一個函數經常需要知道該函數的定義,這時ctags就派上用場了,其安裝和使用方法如下: 安裝方法: sudo apt-get install ctags (ubu

ctags-vim代碼間快速跳轉

實現 重新啟動 舉例 一個 lin 驅動 ubunt 使用 建議 ctags-vim代碼間快速跳轉 1、說明 在Linux環境下使用vim進行驅動程序編寫和維護的時候,會經常需要調用Linux內核的函數或宏定義,在驅動程序和kernel代碼之間頻繁跳轉是件很繁瑣的事,使用c

轉載】Maven依賴中的scope詳解

lan 無需 而已 ref targe 周期 包含 配置 com Maven的一個哲學是慣例優於配置(Convention Over Configuration), Maven默認的依賴配置項中,scope的默認值是compile,項目中經常傻傻的分不清,直接默認了。今天梳