Cygwin下cscope的配置

法1  使用mlcscope
html


vim當中默認使用cs或者cscope命令
java

可是cygwin當中的cscope不是使用cscope調用的,而是mlcscopelinux

因此查看本地是否有mlcscope,若有則作軟連接數據庫

ls /usr/bin/mlcscopevim

ln -s /usr/bin/mlcscope /usr/bin/cscopewindows

ls /usr/bin/cscope

(若是沒有則在Cygwin安裝管理器中安裝  vim   cscope  ctags,再作軟連接)svn

 

cygwin上使用vim+cscope+ctags閱讀源碼 
From: http://blog.csdn.net/linwhwylb/article/details/6526637

函數

1.須要安裝的東西學習

vimui

cscope

ctags

在cygwin更新管理中輸入上面三個關鍵詞進行搜索便可。

 

vim當中默認是使用cs或者cscope命令的,可是cygwin當中的cscope不是使用cscope調用的,而是mlcscope。

建立一個軟鏈接便可。

$ ln -s /usr/bin/mlcscope /usr/bin/cscope

 

進入到源碼的目錄,執行下面的命令

$ cscope

$ ctags *

生成cscope.out以及tags文件,進入vim,而後執行:cs add cscope.out便可,接下來就可使用:cs find g 符號

之類的命令進行符號定義搜索了。Ctrl + T返回,Ctrl + ]跳轉到目標定義處。



法2 使用cscope for win32

From: http://www.vimer.cn/2009/10/%E5%9C%A8vimgvim%E4%B8%AD%E4%BD%BF%E7%94%A8cscope.html


vim --version | grep cscope確保vim支持cscope

不支持的話要從新編譯vim,加上支持選項:

--enable-cscope


下載cscope:

cscope(linux): http://cscope.sourceforge.net/
cscope(windows): http://sourceforge.net/projects/mslk/files/


最後把cscope放進環境變量


搭建好了vim+cscope的環境以後,那麼如今就是咱們學習怎麼用的時候了

function Do_CsTag()
    if(executable('cscope') && has("cscope") )
        if(g:iswindows!=1)
            silent! execute "!find . -name '*.h' -o -name '*.c' -o -name '*.cpp' -o -name '*.java' -o -name '*.cs' > cscope.files"
        else
            silent! execute "!dir /b *.c,*.cpp,*.h,*.java,*.cs >> cscope.files"
        endif
        silent! execute "!cscope -b"
        if filereadable("cscope.out")
            execute "cs add cscope.out"
        endif
    endif
endf

調用這個函數就能夠用cscope生成數據庫,並添加到vim中,具體每一個命令意義以下:

if(g:iswindows!=1)
    silent! execute "!find . -name '*.h' -o -name '*.c' -o -name '*.cpp' -o -name '*.java' -o -name '*.cs' > cscope.files"
else
    silent! execute "!dir /s/b *.c,*.cpp,*.h,*.java,*.cs > cscope.files"
endif

上面的函數,經過操做系統的不一樣,用不一樣的命令實現,將當前目錄的源碼文件導入到一個叫作cscope.files的文件中。這個文件是cscope用來生成數據庫時的默認存儲文件列表的文件。
不理解dir命令?看看這篇文章吧

http://hi.baidu.com/moodmusic/blog/item/888856ed309605d7b21cb141.html

silent! execute "!cscope -b"

這個命令就是csope在生成數據庫,你會發現生成了一個cscope.out的文件,這個就是生成數據庫,實際上若是加上參數-q來加快索引速度的話,還會生成cscope.in.out, cscope.po.out這兩個文件,各個參數意義以下:
-b : 默認狀況下,cscope在生成數據庫後,會進入cscope本身的界面,咱們在vim中使用他,固然不但願有這樣的界面,就能夠用-b來屏蔽掉。

execute "cs add cscope.out"

最後這一步,就是在vim中添加了cscope.out這個數據庫。

下面列出cscope的經常使用生成數據庫選項:

-R: 在生成索引文件時,搜索子目錄樹中的代碼,由於咱們已經在cscope.files中把全部的文件都打印入了列表中,因此
-b: 只生成索引文件,不進入cscope的界面
-q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
-k: 在生成索引文件時,不搜索/usr/include目錄
-i: 若是保存文件列表的文件名不是cscope.files時,須要加此選項告訴cscope到哪兒去找源文件列表。可使用「-」,表示由標準輸入得到文件列表。
-I dir: 在-I選項指出的目錄中查找頭文件
-u: 掃描全部文件,從新生成交叉索引文件
-C: 在搜索時忽略大小寫
-P path: 在以相對路徑表示的文件前加上的path,這樣,你不用切換到你數據庫文件所在的目錄也可使用它了。

好了,到了這裏,cscope的原理你們應該都清楚了,那麼在vim中怎麼使用呢?

"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    查找包含本文件的文件

可是誰也不想敲這麼多命令吧,因此我在vimrc中建了這樣一個映射

nmap <C-@>s :cs find s <C-R>=expand("<cword>")<CR><CR>:copen<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>:copen<CR>
nmap <C-@>t :cs find t <C-R>=expand("<cword>")<CR><CR>:copen<CR>
nmap <C-@>e :cs find e <C-R>=expand("<cword>")<CR><CR>:copen<CR>
nmap <C-@>f :cs find f <C-R>=expand("<cfile>")<CR><CR>:copen<CR>
nmap <C-@>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>:copen<CR>
nmap <C-@>d :cs find d <C-R>=expand("<cword>")<CR><CR>:copen<CR>

實際上就是參考 cscope_maps.vim 這個文件,你們能夠去下載他,而後直接放到plugin目錄就行。

最後,咱們來講一下cscope和ctags的兼容問題。我在vimrc中配置了一段代碼:

if has("cscope")
    set cscopequickfix=s-,c-,d-,i-,t-,e-
    set csto=0
    set cst
    set csverb
endif

官方解釋以下:
http://vimcdoc.sourceforge.net/doc/if_cscop.html

簡單來講,主要功能就是同時搜索ctags和cscope的標籤,而且cscope優先掃描。



 

Tips:

1  windows下的cscope須要設置TMPDIR的環境變量,不然不能cscope -b

2  cscope.files儘可能用find生成,應該我的需求不一樣,譬如.svn不索引,.cxx不索引等等

3  若是生成了cscope.out 可是在其餘目錄中直接cs add,會不能jump。

   解決方法是加上pre-dir    

    cscope add   PATH1/cscope.out   PATH2
     其中PATH1是cscope.out的pathPATH2是當前目錄下能夠正確jump到索引處的pre-path



常規的cscope 使用方法:

進入到源碼的目錄

cscope -Rbq

生成cscope.out以及tags文件 cscope.out, cscope.in.out, cscope.po.out

其中cscope.out是基本的符號索引

後兩個文件是使用」-q「選項生成的,能夠加快cscope的索引速度

進入vim,而後執行:cs add cscope.out

接下來就可使用cscope

cscope add 'PATH'    (注意 PATH要加引號 不然在vimrc中可能會報錯)

同時能夠在vimrc中設立鍵位綁定



cscope
的經常使用選項:

-R: 在生成索引文件時,搜索子目錄樹中的代碼(遞歸搜索)

-b: 只生成索引文件,不進入cscope的界面

-q: 生成cscope.in.outcscope.po.out文件,加快cscope的索引速度

-k: 在生成索引文件時,不搜索/usr/include目錄

-i: 若是保存文件列表的文件名不是cscope.files時,須要加此選項告訴cscope到哪兒去找源文件列表。可使用」-「,表示由標準輸入得到文件列表。

-Idir: -I選項指出的目錄中查找頭文件

-u: 掃描全部文件,從新生成交叉索引文件

-C: 在搜索時忽略大小寫

-Ppath: 以相對路徑表示的文件前加上的path,這樣,你不用切換到你數據庫文件所在的目錄也可使用它了。

相關文章
相關標籤/搜索