1. 程式人生 > >在vim中使用cscope查詢呼叫、定義函式和變數的地方

在vim中使用cscope查詢呼叫、定義函式和變數的地方

在vim中用了一陣子ctags,確實美中不足。ctags只能根據呼叫函式的地方查詢定義該函式的地方,不能根據定義函式的地方查詢都有哪些地方呼叫了
該函式。於是又學習了cscope。Cscope在主頁上說它具有毋庸置疑的UNIX血統,早在PDP-11的時代就已經在貝爾實驗室開發出來了。我的
Linux是SuSE10.0,系統自帶的有cscope軟體。
一、將
http://cscope.sourceforge.net/cscope_maps.vim
另存為檔案~/.vim/plugin/cscope_maps.vim
二、因為cscope將“ctrl+空格”作為對映鍵,但是這樣會調出輸入法,因此將~/.vim/plugin/cscope_maps.vim檔案中的替換為(或者是你沒有對映過的你喜歡的快捷鍵)
三、進入C語言原始碼目錄,建立符號表:

[email protected]:~/linux/linux0.11/source-0.11> cscope -R
ctr-D退出後,當前目錄會多一個檔案cscope.out,這個檔案比tags大多了。
四、使用指南
1)使用下面的命令直接進入main函式定義的地方,如果有多個的話,輸入索引號,回車。
[email protected]:~/linux/linux0.11/source-0.11> vi -t main
2)將游標停留在一個函式或變數上,"ctrl+]",將直接跳轉到定義該函式的地方。
3)將游標停留在一個函式或變數上,"ctrl+\"再輸入s,這樣就會出現所有呼叫、定義該函式的地方,輸入索引號,回車即可。
4)將游標停留在一個函式或變數上,再輸入s,這樣就會出現所有呼叫、定義該函式的地方,輸入索引號,回車後會以水平方式在另外一個視窗顯示。
5)將游標停留在一個函式或變數上,再輸入s,這樣就會出現所有呼叫、定義該函式的地方,輸入索引號,回車後會以垂直方式在另外一個視窗顯示。
6)ctrl+t回到原來跳轉前的地方,連續按兩下’’可以再回去。
附:
vim分割視窗的操作
:split                        水平(上下)分割視窗
:vsplit或者CTRL-W v            垂直(左右)分割視窗
:new                          水平分割視窗,建立空檔案
:vnew                         垂直分割視窗,建立空檔案
vim多視窗操作命令
:qall                         退出所有視窗
:wall                         儲存所有視窗
:wqall或者:xall                儲存並退出所有視窗
:wqall!或者:xall!             儲存並退出所有視窗,如果有的檔案只讀,不需要先設定寫許可權
:qall!                        強制退出所有視窗
CTRL-W W                      在視窗間移動
CTRL-W O                      關閉其他所有視窗
參考文獻:
1)
http://cscope.sourceforge.net
2)
http://cscope.sourceforge.net/cscope_vim_tutorial.html
3)
~/.vimrc
4)
對~/.vimrc的改進

相關推薦

vim使用cscope查詢呼叫定義函式變數地方

在vim中用了一陣子ctags,確實美中不足。ctags只能根據呼叫函式的地方查詢定義該函式的地方,不能根據定義函式的地方查詢都有哪些地方呼叫了 該函式。於是又學習了cscope。Cscope在主頁上說它具有毋庸置疑的UNIX血統,早在PDP-11的時代就已經在貝爾實驗室開發出來了。我的 Linux是S

SQl的UDF(使用者自定義函式)與儲存過程的區別優點

UDF定義: 和儲存過程很類似,使用者自定義函式是一組有序的T_SQL語句,這些語句被預先優化和編譯,並且可以作為一個單元來進行呼叫。UDF和儲存過程的主要區別在於結果的返回方式。為了能支援多種的不同的返回值,UDF比儲存過程有更多的限制。 UDF和儲存過程的具體區別: 儲

儲存過程呼叫定義函式(不在同一使用者下)提示無許可權或識別符號無效

 問題描述:           在A使用者下自定了一個函式 : getName(); 然後在B使用者下建立儲存過程,呼叫了A使用者下的自定義函式getName;在編譯儲存過程時提示函式 getName無效。 解決方法:           將A使用者下自定義函式getNa

linux命令在系統查詢順序分類基本使用

pass 終端 ext src its echo media oot 命令 linux命令在系統中的查詢順序 在系統中輸入一條命令時,系統的查詢查詢順序為 linux命令的分類 內部命令:命令本身存放在系統內存中,是shell程序的一部分,這些命令由shell程序內部完

Mysql儲存過程與自定義函式的區別

建立儲存過程: CREATE [definer = {user|current_user}] PROCEDURE sp_name ([ proc_parameter [,proc_parameter ...]]) [ characteristi

學會使用MySQL定義函式儲存過程

一、快速瞭解什麼是儲存過程和函式?   儲存過程和函式是事先經過編譯並存儲在資料庫中的一段 SQL 語句的集合,呼叫儲存過程 和函式可以簡化應用開發人員的很多工作,減少資料在資料庫和應用伺服器之間的傳輸,對 於提高資料處理的效率是有好處的。   在對儲存過程或函式進行操作時,需要

在vue多次呼叫同一個定義全域性變數的例項

在Vue開發中,有很多場景會用到多次重複的API請求。 例如: 前端精品教程:百度網盤下載 ? 1

關於在vim查詢替換

1,查詢 在normal模式下按下/即可進入查詢模式,輸入要查詢的字串並按下回車。 Vim會跳轉到第一個匹配。按下n查詢下一個,按下N查詢上一個。 Vim查詢支援正則表示式,例如/vim$匹配行尾的"vim"。 需要查詢特殊字元需要轉義,例如/vim\$匹配"vim$"。 2,大小寫敏感查詢 在查詢

異常爬蟲demo find函式findAll函式 以及正則表示式查詢元素

程式碼位於書的第1-2章 # from urllib.request import urlopen # from bs4 import BeautifulSoup # html = urlopen("http://pythonscraping.com/pages/page1

如何寫一個php擴充套件深度查詢與新增的函式

寫擴充套件時經常遇到從一個多維的陣列中查詢元素,或把一個元素新增到多維陣列中,當維度超過3個時, 就會寫出一堆程式碼來比較繁瑣了,對於這種情況可以定義一個引數可變的函式解決 新增: void lycitea_helpers_common_depthadd(int args, cha

C語言呼叫靜態庫函式動態庫函式的方式

C語言中呼叫動態庫函式的兩種方式 方式一.隱式呼叫 將動態庫的相關檔案拷貝到當前目錄下(lib、dll),然後新增以下程式碼,在程式中指定連線庫函式。 注意:第二個引數給出的是引入庫檔案(或稱“匯出庫檔案”),而不是dll。在程式執行過程中,lib將dll中需要用到的函式對映到對應的記憶

shell呼叫定義函式及傳參

1 單個引數 #!/bin/bash function LoopPrint() { count=0; while [ $count -lt $1 ] ; do echo $count; let +

Python 函式呼叫&定義函式&函式引數

一.函式呼叫 就拿abs()函式來舉例 用來返回數值的絕對值 >>> abs(-5)5 二.定義函式  我們可以通過def 來自定義函式,格式為 def  函式名(引數): 舉一個定義計算兩個數值相乘的函式:  def product(x

宣告定義區別(變數函式類)

相同點 對編譯器來說都是符號,宣告就會在符合表中留下一列等待填充的空白,即不完整的等待填充一行,而定義就是符合表中完整的一行。在編譯cpp成obj時,這裡面變數、函式和類三種東西看成並列地位,即都是一個名字,符號表中的一列(可以先簡單認為obj的符號表中只有兩列即符號名字和地址) 不

vim使用查詢命令查詢指定字串

要自當前游標位置向上搜尋,請使用以下命令:           /pattern   Enter             其中,pattern   表示要搜尋的特定字元序列。           要自當前游標位置向下搜尋,請使用以下命令:           ?pattern   Enter         

關於在vim查詢替換(轉載)

轉載出處:https://www.cnblogs.com/huxinga/p/7942194.html   1,查詢 在normal模式下按下/即可進入查詢模式,輸入要查詢的字串並按下回車。 Vim會跳轉到第一個匹配。按下n查詢下一個,按下N查詢上一個。 Vim查詢支援正則

初學mysql(十)-資料庫之儲存過程函式與遊標-自定義函式流程控制(下)

上一篇部落格講了儲存過程、函式、以及遊標,這一篇部落格接著上一篇部落格來說。首先說說mysql資料庫中的流程控制及自定義函式的使用。 自定義函式: 根據所需要的功能,使用流程控制來完成所需要的功能,完成功能的程式碼就稱為自定義函式。要想完成自定義函式就必須學會流程控制的使

unity三種呼叫其他指令碼函式的方法

第一種,被呼叫指令碼函式為static型別,呼叫時直接用  指令碼名.函式名()第二種,GameObject.Find("指令碼所在的物體的名字").SendMessage("函式名"); //能呼叫public和private型別函式第三種,GameObject.Find(

171207之Oracledecode函式SIGN函式INSTR函式

一:DECODE的語法: DECODE(value,if1,then1,if2,then2,if3,then3,…,else),表示如果value 等於if1時,DECODE函式的結果返回then1,…,如果不等於任何一個if值,則返回else。 dec

excel的VBA兩種呼叫工作表函式的方法

excel 的VBA中有兩種呼叫工作表函式的方法: Sub aa()   ActiveSheet.Range("b2") = Application.WorksheetFunction.Max(Rang