1. 程式人生 > >Vim中自動載入cscope.out

Vim中自動載入cscope.out

Vimer初成長,Vim + ctags + cscope 這個組合基本是每個Vimer的必備吧。雖然ctags已經足夠強大,但是cscope可以做的更多。下面來分享下自己的vimrc指令碼關於cscope的一部分,該指令碼可以實現在專案的任一子目錄下,自動的向上查詢cscope.out,並把他add進來。

首先來分享一個小指令碼,可以幫助我們在專案中生成cscope.out 和ctags。

我把這個檔案命名為cs.sh

  1. #!/bin/sh  
  2. find . -name "*.h" -o -name "*.c" -o -name "*.cpp" -o -name "*.java"\  
  3.         >cscope.files  
  4. cscope -bkq -i cscope.files  
  5. ctags -R  


需要的注意的是,上面的指令碼中,生成的cscope.files中儲存的是相對路徑,而不是絕對路徑。這樣的話,在cscope 中查詢tags的時候,是沒法開啟相應的包含查詢結果的檔案的。怎麼避免這個問題呢?有如下兩個方法:

1, 在cs.sh的指令碼中,find命令後接一個變數PRO_PATH,這個PRO_PATH是當前專案的跟目錄,這個時候cscope.files中儲存的就是所有專案檔案的絕對路徑了。

2,在:cs add的時候,接一個prepend path

  1. :cs add [cscope.out] [pre-path]  


我用了第二個方法,所以就有了下面的vimrc片段,

  1. if has("cscope")  
  2.     set csprg=/usr/bin/cscope  
  3.     set csto=0
  4.     set cst  
  5.     set csverb  
  6.     set cspc=3
  7.     "add any database in current dir  
  8.     if filereadable("cscope.out")  
  9.         cs add cscope.out  
  10.     "else search cscope.out elsewhere  
  11.     else
  12.        let cscope_file=findfile("cscope.out"".;")  
  13.        let cscope_pre=matchstr(cscope_file, ".*/")  
  14.        if !empty(cscope_file) && filereadable(cscope_file)  
  15.            exe "cs add" cscope_file cscope_pre  
  16.        endif        
  17.      endif  
  18. endif