2010-02-02 86 views
10

每次在Vim中加載cscope.out後,我需要將Vim的「pwd」更改爲cscope.out文件所在的目錄,這可能是由於cscope在生成標記文件時使用相對路徑。因此,如果有一種方法可以強制cscope在其標記文件中使用絕對路徑--cscope.out,那麼無論您的Vim會話的pwd是否與cscope.out文件所在的目錄相同,都是如此。如何讓cscope在cscope.out文件中使用絕對路徑?

回答

11

當導入cscope.out中,你可以提供前綴,即

:cscope add /path/to/cscope.out /path/to/src/code 

那麼你的搜索會變成像:

Cscope Tag: foobar 
    # line filename/context/line 
    1  21 /path/to/src/code/foobar_file.c 
1

@Aaron H.是正確的。

對於我的配置我用cscope_maps.vim插件並修改了以下行:

40  " add any cscope database in current directory 
    41  if filereadable("/usr/project/cscope.out") 
    42   cs add /usr/project/cscope.out /usr/project 
    43  " else add the database pointed to by environment variable 
    44  elseif $CSCOPE_DB != "" 
    45   cs add $CSCOPE_DB 
    46  endif 

去哪兒「在/ usr /項目」是我想要的cscope.out中文件的位置和絕對路徑使用。

4

cscope tutorial有針對此問題一個非常簡單的解決方法:

11.Try設置$CSCOPE_DB環境變量指向創建Cscope的數據庫,這樣你就不會總是需要啓動vim以 與數據庫相同的目錄。這對於代碼被拆分成多個子目錄的 項目特別有用。注: 這個工作,你應該建立具有絕對路徑的數據庫: cd到/,並做

find /my/project/dir -name '*.c' -o -name '*.h' > /foo/cscope.files 

然後在同一目錄中cscope.files文件運行Cscope的(或使用 通過「cscope -i /foo/cscope.files'),則設置並導出$ CSCOPE_DB 變量,它指向該產生的cscope.out中文件):

cd /foo 
cscope -b 
CSCOPE_DB=/foo/cscope.out; export CSCOPE_DB 

(最後的命令以上對於Bourne /光輝/ Bash shell:我忘記了 如何導出基於csh的shell中的變量,sin我避免他們像瘟疫 )。

你現在應該可以在你的 機器上的任何目錄下運行'vim -t foo',讓Vim直接跳到'foo'的定義。我傾向於 爲我的所有不同的項目編寫小shell腳本(只是定義和導出CSCOPE_DB),這使我可以通過 簡單的'source projectA'命令在它們之間切換。

3

您可以使用您的cscpoe.files絕對路徑到您的文件,這裏是我的腳本來生成我cscope的數據庫

#!/bin/sh 

find $PWD -name '*.[ch]' -exec echo \"{}\" \; | sort -u > cscope.files 
cscope -bvq 

然後,只需VIM cscope.files,也許:CS添加cscope.out中,儘管我的cscope插件可以自動完成。然後我搜索我感興趣的文件並用gf跳到它們。

+0

另外,在腳本運行的相同目錄中運行'export CSCOPE_DB = $(pwd)/ cscope.out' – Paschalis 2015-01-22 10:13:46

10

您可以讓vim解釋cscope中的路徑。通過設置cscoperelative選項將相對於設置爲cscope.out文件的位置。 從:help csre

如果「cscoperelative」被設置,那麼在沒有給予 cscope的前綴的(前綴是-P選項的cscope的參數), cscope.out中位置的基名(通常是項目根目錄)將被用作前綴來構造一個絕對路徑 。默認是關閉的。 注意:此選項僅在cscope(cscopeprg)爲 時未使用前綴路徑(-P)進行初始化時有效。

例子

:設置csre
:nocsre設置

+5

這應該是真正被接受的答案,因爲從vim + cscope的角度來看是迄今爲止最簡單的解決方案。謝謝您的回答! – janjust 2016-02-01 17:05:46

1

注:因爲我沒有足夠的資深添加評論: 亞倫和NEHA的答案是有用的我更多地瞭解了整個系統,但這個問題的最好和最直接的答案目前排在第三位,是沙燕的。

提問者更要求有關cscope的獲取絕對路徑,不使用(非常有能力和強大)VIM圍繞它的工作。

注2:還有另外一種方法,使vim的一個變化,完成相同的東西NEHA一樣。

:set cscopeprg=cscope -P path_to_relative_base 

我喜歡NEHA的更好,但這種方式更接近於修改cscope的,而不是vim的設置,如果這是你想要的。這是允許您將cscope數據庫移到任何地方的唯一方法。

相關問題