ctags 用于把關(guān)鍵字生成一個(gè)索引表,在vim里可直接使用"ta 關(guān)鍵字"在索引表里查找并定位.
cscope 也是生成索引表,,在vim里使用"cs xx xx xx "來(lái)查找
如查看ffmpeg-3.0的源碼:
1). 在終端進(jìn)入源碼目錄,,輸入"ctags -R *" // 會(huì)在當(dāng)前目錄下生成索引表文件,, 文件名為tags
2). 在終端使用,,需確保終端當(dāng)前工作目錄是在索引表文件tags的所在目錄(注意需確保/etc/vimrc里沒(méi)有"set tags=xx"的語(yǔ)句).
如查看"av_register_all"函數(shù), 則打開(kāi)vim后,輸入":ta av_register_all", 按回鍵后可以直接定位到函數(shù)體的所在源文件,。
當(dāng)查看的內(nèi)容出現(xiàn)多個(gè)選擇時(shí),,輸入前面的序號(hào)即可跳轉(zhuǎn)到相應(yīng)的源碼文件。
在vim里,按"ctrl+g"可查看當(dāng)前的源文件名, "ctrl+o"可跳回上次瀏覽的位置.
當(dāng)標(biāo)移動(dòng)到要查看的關(guān)鍵字后,,按"ctrl+]"直接查看.
// vim+ctags 只適合查看類型的定義,,函數(shù)體等。并不適合如需查看一個(gè)函數(shù)在哪些地方被調(diào)用了,,又被哪些函數(shù)調(diào)用,,所以還需要用cscope命令
3). 使用cscope命令生成索引表
終端命令:
find ./ -name "*.h" -o -name "*.c" > cscope.files //在當(dāng)前目錄下查找*.h, *.c文件,并把相應(yīng)的文件及路徑輸出到cscope.file文件里
cscope -bkq // 讓cscope根據(jù) cscope.file文件里的文件列表生成索引表(cscope.in.out cscope.out cscope.po.out
)
4). cscope在vim里的用法
打開(kāi)vim后,, 輸入":cs"確認(rèn)后會(huì)彈出幫助說(shuō)明:
cscope commands:
add : Add a new database (Usage: add file|dir [pre-path] [flags])
find : Query for a pattern (Usage: find c|d|e|f|g|i|s|t name)
c: Find functions calling this function
d: Find functions called by this function
e: Find this egrep pattern
f: Find this file
g: Find this definition
i: Find files #including this file
s: Find this C symbol
t: Find this text string
help : Show this message (Usage: help)
kill : Kill a connection (Usage: kill #)
reset: Reinit all connections (Usage: reset)
show : Show connections (Usage: show)
Press ENTER or type command to continue
常用cs命令:
"cs add ./"是用于增加當(dāng)前目錄下的索引表
"cs find c 函數(shù)名" 查看哪些函數(shù)調(diào)用指定的函數(shù)名
"cs find d 函數(shù)名" 查看指定的函數(shù)名調(diào)用了哪些函數(shù)
"cs find g 類型/函數(shù)" 查看類型的定義或函數(shù)體
"cs find t 字符串" 按字符串內(nèi)容來(lái)查找相應(yīng)的關(guān)鍵字
//////////////////////////////////////////////////////////
在一些源碼工程里,,如uboot, linux kernel里:
直接執(zhí)行下面命令即可產(chǎn)生相應(yīng)的索引表:
make tags
make cscope
|