2010-02-02 15 views
10

Ogni volta dopo aver caricato un cscope.out in Vim, ho bisogno di cambiare "pwd" di Vim nella stessa directory in cui cscope.out è sotto, il che potrebbe essere dovuto al fatto che il cscope usa il percorso relativo durante la generazione del file di tag. Quindi, se c'è un modo per forzare cscope ad usare il percorso assoluto nel suo file di tag - cscope.out, allora sarà indipendentemente dal fatto che il pwd della tua sessione Vim sia lo stesso della directory in cui si trova il file cscope.out.Come consentire a cscope di utilizzare il percorso assoluto nel file cscope.out?

risposta

11

Durante l'importazione cscope.out, è possibile fornire il prefisso, vale a dire

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

Poi le ricerche si trasformerà in su come:

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

@Aaron H. è giusto.

Per la mia configurazione ho usato il plugin cscope_maps.vim e modificate le seguenti righe:

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 

Dove "/ usr/progetto" è la posizione del file cscope.out e il percorso assoluto che voglio uso.

4

Il cscope tutorial ha una soluzione molto semplice per questo problema:

11.Try impostare la variabile $CSCOPE_DB ambiente per puntare a un database Cscope si crea, in modo da non sempre bisogno di lanciare Vim in la stessa directory del database. Ciò è particolarmente utile per i progetti in cui il codice è suddiviso in più sottodirectory. Nota: per questo al lavoro, si dovrebbe costruire il database con percorsi assoluti: cd a /, e fare

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

Poi gestita Cscope nella stessa directory del file cscope.files (o usare 'cscope /foo/cscope.files -I), quindi impostare ed esportare la variabile $ CSCOPE_DB, puntando al file cscope.out che risulta):

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

(l'ultimo comando di cui sopra è per Bourne/Korn/Bash shell: ho dimenticato come esportare le variabili in shell basate su csh, sin ce li evito come la peste).

Ora dovresti essere in grado di eseguire "vim -t foo" in qualsiasi directory sulla tua macchina e fare in modo che Vim salti direttamente alla definizione di "pippo". Tendo a scrivere piccoli script di shell (che definiscono ed esportano CSCOPE_DB) per tutti i miei diversi progetti, che mi consente di passare da uno di essi all'altro con un semplice comando 'source projectA'.

3

È possibile creare i cscpoe.files utilizzando percorsi assoluti ai file, ecco il mio script per generare i miei database cscope

#!/bin/sh 

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

cscope.files Poi basta vim e forse: cs aggiungere cscope.out , anche se il mio plugin cscope lo fa automaticamente. Quindi cerco i file che mi interessano e li salgo con gf.

+0

inoltre, esegui 'export CSCOPE_DB = $ (pwd)/cscope.out' nella stessa dir che lo script esegue – Paschalis

10

È possibile chiedere a vim di interpretare i percorsi in cscope.out relativo alla posizione del file cscope.out impostando l'opzione cscoperelative. Da :help csre:

Se 'cscoperelative' è impostato, allora in assenza di un prefisso dato a cscope (prefisso è l'argomento -P possibilità di cscope), nome di base posizione cscope.out (solitamente il directory radice del progetto) verrà utilizzato come prefisso per la creazione di un percorso assoluto. L'impostazione predefinita è disattivata. Nota: questa opzione è valida solo quando cscope (cscopeprg) è inizializzato senza un percorso prefisso (-P).

Esempi

: set csre
: impostate nocsre

+5

Questa dovrebbe essere la risposta accettata poiché da una prospettiva vim + cscope è di gran lunga la soluzione più semplice. La ringrazio per la risposta! – janjust

1

Nota: dal momento che non sono abbastanza alti per aggiungere ancora commenti: Aaron e Neha di risposte sono state utile per me per conoscere meglio la intero sistema, ma la risposta migliore e più diretta alla domanda è attualmente al 3 ° posto ed è quella di Shayan.

Il richiedente chiedeva di più ottenere il percorso assoluto da parte di cscope, non lavorarci intorno usando (il molto capace e potente) vim.

Nota2: C'è un altro modo per apportare un singolo cambiamento in vim e ottenere lo stesso risultato di Neha.

:set cscopeprg=cscope -P path_to_relative_base 

mi piace Neha di meglio, ma in questo modo è più vicino alla modifica cscope piuttosto che le impostazioni di Vim, se questo è ciò che si desidera. E questo è l'unico modo che ti permette di muovere il cscope db ovunque.

Problemi correlati