#pwd
#/usr/src/linux-2.6.37
#ctags –R * ## 遞歸建立 tags文件
$vi -t tag ## -t 是參數 tag是要查找的變量/函數名
ctrl+] 跳轉函數定義
ctrl+t 跳回函數調用處
-----------------------------
若一個函數在多個地方定義,則可以使用: :ts :tp :tn , : 是vim的最后一行模式
另外有單個文件中函數跳轉工具,方括號組合,跟使用命令模式一樣
[ [, 函數首花括號,向前
] ], 函數首花括號,向后
[ ], 函數尾花括號,向前
] [, 函數尾花括號,向后
----------------------------------------------------------------------------------------------------------------------------------
以下轉載
http://blog.csdn.net/ducduc/archive/2009/05/25/4214555.aspx
Vi大家都很熟悉,某些情況下它是我們在Linux下唯一可用的文本編輯器。其實我們平時所指的VI其實是VIM(ViImproved,VI增強版)。有人常常拿VIM和emacs比較,VIM盡管不象emacs那樣有那么多的功能,但是比emacs更方便、好用。VIM簡單易用,只要看看VIM自帶的vitutor,大約只要20分鍾就能掌握VIM的用法。對於Linux下的C/C++的程序員,使用VIM+Ctags的組合來寫程序也許是最佳的選擇。^_^
VI的使用方法這里就不羅嗦了,本文假設大家已花了20分鍾學習過了vitutor。 ^_^
本節我們主要講一下Ctags這個程序。盡管ctags也可以支持其它編輯器,但是它正式支持的只有VIM。並且VIM中已經默認安裝了Ctags,它可以幫助程序員很容易地瀏覽源代碼。
熟練的使用ctags僅需記住下面七條命令:(很簡單吧,呵呵)
1. $ ctags –R * ($ 為Linux系統Shell提示符)
2. $ vi –t tag (請把tag替換為您欲查找的變量或函數名)
3.:ts (ts 助記字:tags list, “:”開頭的命令為VI中命令行模式命令)
4.:tp (tp 助記字:tags preview)---此命令不常用,可以不用記
5.:tn (tn 助記字:tags next) ---此命令不常用,可以不用記
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 -t main
這個命令將打開定義“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文件(帚把不到,灰塵不會自己跑掉^_^)。ctags的使用
1 $ ctags -R
“-R”表示遞歸創建,也就包括源代碼根目錄下的所有子目錄下的源程序。“tags”文件中包括這些對象的列表:
2 用#define定義的宏
枚舉型變量的值
函數的定義、原型和聲明
名字空間(namespace)
類型定義(typedefs)
變量(包括定義和聲明)
類(class)、結構(struct)、枚舉類型(enum)和聯合(union)
類、結構和聯合中成員變量或函數
3 $ vim -t foo_bar
這個命令將打開定義“foo_bar”(變量或函數或其它)的文件,並把光標定位到這一行。
4 在vim編輯器內用“:XX”命令,例如:
:cstag main 列出所有main所在位置
:ta foo_bar 跳轉到foo_bar函數位置
5 把光標移到變量名或函數名上,然后按下“Ctrl-]”。用“Ctrl-o”退回原來的地方。
還有一個工具能自動將代碼整理成gnu的風格
indent filename
vim
在VIM編輯器的環境下用“:make”就可以編譯程序,當然其前提是在當前目錄下有Makefile文件。運行完“: make”之后,如果程序中有錯誤,就會顯示出來。
這時候,光標會自動指向第一個出現錯誤的地方,而且你還可以看到錯誤的提示。然后,你就可以改正錯誤,而不用手工找到出錯的那一行。記住下面幾個有用的命令:
“:cl”列出錯誤
“:cn”讓光標指向下一個錯誤
“:cp”讓光標指向上一個錯誤
“:cnew”從頭開始
你甚至可以讓VIM識別出其它編譯器而不是gcc的錯誤提示。這對一些開發嵌入式系統的程序員這很有用,因為他們很可能用的不是gcc而是其它編譯器。
通過設置“errorformat”的值,可以讓VIM識別出編譯器的出錯提示。因為不同的編譯器的出錯提示是不同的,所以如果用的不是gcc就要重新設置。
“errorformat”的值是一個字符串,它的格式和C語言的scanf的字符串格式相識。
gcc的“errorformat”的值為:%f:%l:%m。其中“%f”表示文件名,“%l”表示行號,“%m”表示出錯信息。
用“:h errorformat”查看詳細的幫助信息。
用“:h quickfix”、“:h make”、“:h makeprg”、“:h errorfile”查看其它的信息。
有用的快捷鍵
下面的這些快捷鍵對程序員很有幫助:
在函數中移動光標
[[ 轉到上一個位於第一列的“{”
]] 轉到下一個位於第一列的“{”
{ 轉到上一個空行
} 轉到下一個空行
gd 轉到當前光標所指的局部變量的定義
* 轉到當前光標所指的單詞下一次出現的地方
# 轉到當前光標所指的單詞上一次出現的地方
括號的匹配
% 用來進行小括號、中括號和大括號的匹配。這要看當前光標指向的是什么符號了。
其它
VIM的配置文件是“.vimrc”,用這個文件可以配置VIM。VIM的圖形界面的版本叫gvim。VIM也有用於Windows平台的版本。
------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
此外還有
[[
]]
[]
再加上
][
一共是 4 個在段落(對於 C 來講就是函數)間跳轉的命令。
總結是:
1,相同就跳到函數的開頭:(如果都是左括號或者都是右括號),不同就跳到函數的結尾:
{ 和 } 用來跳到函數的開頭。
[] 和 ][ 用來跳到函數的結尾。
2,左右左右,“左”在前面。前后前后,“前”也在前面。因此左括號打頭則表示向前,右括號打頭則表示向后:
[[ 和 [] 用來向前跳
]] 和 ][ 用來向后跳
結合起來就是:
[[ 用來跳到光標前面的一個函數開始處。如果光標在函數體內的話,那就是所在函數的開始處。
][ 用來跳到光標后面的一個函數結尾處。如果光標在函數體內的話,那就是所在函數的結尾處。
]] 用來跳到光標后面的一個函數開始處。如果光標在函數體內的話,那就是下一個函數的開始處。
[] 用來跳到光標前面的一個函數結尾處。如果光標在函數體內的話,那就是上一個函數的結尾處。
1,先想是想往前跳,還是往后跳?
如果是想往前,就摁 [,如果是想往后,就摁 ],然后指頭別松開。
2,再想是想到開始處,還是結尾處?
如果是開始處,就再摁一下。如果是結尾處,就摁另一個鍵。