2010-02-02 6 views
10

Jedes Mal, nachdem ich ein cscope.out in Vim geladen habe, muss ich Vims "pwd" in das gleiche Verzeichnis wie cscope.out ändern, was darauf zurückzuführen sein könnte, dass cscope relativen Pfad beim Generieren der Tag-Datei verwendet. Wenn es also eine Möglichkeit gibt, cscope zu zwingen, in seiner Tag-Datei - cscope.out - den absoluten Pfad zu verwenden, dann wird es unabhängig davon, ob das pwd Ihrer Vim-Sitzung dasselbe ist wie das Verzeichnis, unter dem sich die cscope.out-Datei befindet.Wie Cscope absoluten Pfad in cscope.out-Datei verwenden?

Antwort

11

Wenn cscope.out importieren, können Sie das Präfix liefern, das heißt

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

Dann wird Ihre Suche auftauchen wie:

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

@Aaron H. ist richtig.

Für meine Konfiguration verwendete ich das cscope_maps.vim Plugin und modifiziert die folgenden Zeilen:

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 

Wo „/ usr/Projekt“ die Lage der cscope.out Datei ist und der absolute Pfad ich will benutzen.

4

Die cscope tutorial hat eine sehr einfache Abhilfe für dieses Problem:

11.Try die $CSCOPE_DB Umgebungsvariable auf eine Cscope Datenbank zeigen Sie erstellen, so dass Sie nicht immer müssen Vim starten in das gleiche Verzeichnis wie die Datenbank. Dies ist besonders nützlich für Projekte, in denen Code in mehrere Unterverzeichnisse aufgeteilt ist. Hinweis: für dies funktioniert, sollten Sie die Datenbank mit absoluten Pfadnamen bauen: cd/und tun

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

Dann Cscope im selben Verzeichnis wie die cscope.files Datei ausführen (oder verwenden Sie ‚cscope -i /foo/cscope.files'), dann setzen und exportieren sie die $ CSCOPE_DB Variable, um es in die cscope.out Datei verweist,) ergibt:

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

(der letzte Befehl oben ist für Bourne/Korn/Bash Shells: Ich habe vergessen, wie man Variablen in csh-basierten Shells, sin, exportiert ce ich vermeide sie wie die Pest).

Sie sollten nun 'vim -t foo' in einem beliebigen Verzeichnis auf Ihrem Rechner ausführen können und Vim direkt zur Definition von 'foo' springen lassen. Ich tendiere dazu, schreiben kleine Shell-Skripte (die nur definieren und exportieren CSCOPE_DB) für alle meine verschiedenen Projekte, die ich zwischen ihnen mit einem einfachen 'source projectA' Befehl wechseln kann.

3

Sie können Ihre cscpoe.files mit absoluten Pfaden zu Dateien, hier ist mein Skripte meiner cscope Datenbanken

#!/bin/sh 

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

Dann einfach vim cscope.files und vielleicht generieren erstellen: cs cscope.out hinzufügen , obwohl mein cscope Plugin das automatisch macht. Dann suche ich nach den Dateien, die mich interessieren und springe mit gf zu den Dateien.

+0

auch, führen Sie 'export CSCOPE_DB = $ (pwd)/cscope.out' auf dem gleichen Verzeichnis wie das Skript aus – Paschalis

10

Sie können vim bitten, die Pfade in cscope zu interpretieren.aus relativ an den Speicherort der cscope.out-Datei durch Festlegen der Option cscoperelative. Von :help csre:

Wenn 'cscoperelative' gesetzt, dann in Abwesenheit eines zu cscope gegebenen Präfix (Präfix ist das Argument der Option -P von cscope), Basisnamen von cscope.out Lage (in der Regel die Projektstammverzeichnis) wird als Präfix verwendet, um einen absoluten Pfad zu erstellen. Der Standardwert ist deaktiviert. Hinweis: Diese Option ist nur wirksam, wenn cscope (cscopeprg) ohne Präfixpfad (-P) initialisiert wird.

Beispiele

: set CSRE
: set nocsre

+5

Dies sollte wirklich die akzeptierte Antwort sein, da eine vim + cscope Perspektive bei weitem die einfachste Lösung ist. Vielen Dank für Ihre Antwort! – janjust

1

Hinweis: da ich genug Kommentare nicht älter bin noch hinzuzufügen: Aaron und Neha die Antworten waren mir nützlich mehr über das zu erfahren, gesamtes System, aber die beste und direkteste Antwort auf die Frage ist derzeit auf dem 3. Platz und ist Shayans.

Der Fragesteller fragte mehr über absolute Pfadnamen von cscope, nicht um es mit Hilfe der (sehr leistungsfähige und leistungsstarke) vim.

Anmerkung2: Es gibt eine andere Möglichkeit, eine einzige Änderung in vim vorzunehmen und dasselbe zu erreichen wie Neha.

:set cscopeprg=cscope -P path_to_relative_base 

Ich mag Neha ist besser, aber auf diese Weise näher cscope statt vim Einstellungen zu ändern, wenn dies ist, was Sie wollen. Nur so können Sie die cscope db an eine beliebige Stelle verschieben.

Verwandte Themen