Vim中自動載入cscope.out(Vim支援cscope)[zz]

來源:互聯網
上載者:User

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


首先來分享一個小指令碼,可以協助我們在項目中產生cscope.out 和ctags。

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

[java] view plaincopy
  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 

上邊用find . 的方式,可能會造成cs找不到檔案,可以find $PWD xxxx即可.


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

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

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

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

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

[java] view plaincopy
  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
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.