2009-11-17 8 views
8

Ich möchte vim in einem beliebigen Unterverzeichnis in meinem Projekt starten und es bis zum Projektstamm für die Datei tags suchen lassen, und dann in einem fremden Verzeichnis außerhalb suchen der Projektbaum.Tipps zum Einrichten komplexer CTAGS-Suchpfade

Für das Beispiel nehmen wir an, ich habe folgendes:

~/projects/foo/bar/baz.c 
~/projects/foo/tags 
~/some/arbitrary/path/tags 

möchte ich baz.c aus dem bar Unterverzeichnis öffnen, haben sie foo/tags zu finden suchen und dann some/arbitrary/path/tags zu suchen, wenn das Symbol nicht gefunden in foo/tags. Jetzt

Ich weiß, was ich tun kann:

set tags=./tags,tags; 

die erste Aufgabe zu erfüllen. Es ist anscheinend das Semikolon, das vim sagt, bis zur Wurzel zu suchen. weder der folgenden Arbeit jedoch:

set tags=./tags,tags,~/some/arbitrary/path/tags; 
set tags=./tags,tags;~/some/arbitrary/path/tags 

Der erste findet man nur Symbole aus ~/some/arbitrary/path/tags während der zweiten nur Symbole in der Tags-Datei im Projektstamm findet.

Wer weiß, wie man das macht? Ich bin auf Linux, kaufe den Weg.

+0

Hmm, ich glaube nicht, dass das Simicolon richtig ist. Sind Sie sicher, dass Sie sich in dem aktuellen Verzeichnis befinden, in dem Sie sich befinden? Versuchen Sie: pwd von vim aus. Ich benutze mehrere Tags, die seit Jahren durch ein Komma getrennt sind, mit relativen und absoluten Pfaden. – Benj

Antwort

5

Ich benutze:

set tags=~/.tags 
set tags+=~/.vim/tags/cpp 
set tags+=~/src/git/gitsrc/tags 
" and so on... 

Für Tags in einem bestimmten Projekt Root-Erzeugung:

map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR> 

I angepasst dieses Setup von den C++ code completion vim tip.

+1

Das Teilen des Befehls in mehrere Zeilen löste das Problem für mich. Ich endete mit 'set tags = tags;' in meinem '.vimrc' und tippe dann': set tags + = ~/einige/arbitrary/path/tags' aus vim. –

0

Ersetzen Sie die Tilde mit Pfad zu Ihrem Haus.

+0

Tut mir leid, funktioniert nicht. Ich habe sowohl 'set tags =./Tags, tags,/home/myuser/einige/arbitrary/path/tags;' und 'set tags =./Tags, tags;/home/myuser/einige/arbitrary/path/Tags ' –

+0

Wie testen Sie es? Was genau passiert? Ich habe eine Etikettendatei in einem Programmierverzeichnis von mir erstellt, meine .vimrc bearbeitet, um diesen Pfad in "set tags" einzubeziehen, wobei ich die Tilde als Startpunkt verwende. Dann habe ich eine Dummy-Datei, test.c, in meinem Home-Verzeichnis (also nicht in dem Verzeichnis mit der Tag-Datei) erstellt, den Namen einer Funktion geschrieben, die in der Tag-Datei aufgelistet wäre, und "ctrl-] gedrückt. "mit dem Cursor über die Funktion. Nahm mich richtig, wo es sollte. – Derek

+0

Ich setze den Suchpfad manuell in vim. Ich teste nach zwei Symbolen, einem Symbol aus einer separaten Datei im selben Projekt, dessen Tag-Datei einige Verzeichnisse oben im Projektstamm enthält, und suche dann nach einem Symbol aus der externen Tag-Datei auf dem beliebigen Pfad. Abhängig davon, welche Version des Pfades ich verwende, finde ich ein Symbol oder das andere, aber niemals beides. –

0

Ihre erste "Set Tags" Option funktioniert für mich in Linux. (Wie zuvor, ich habe es vorher gemacht, und ich habe es nur neu erstellt, um sicher zu sein.) Sie können viele verschiedene Pfade in Ihrer Tag-Option haben, sowohl absolute als auch relative. Im zweiten Fall haben Sie jedoch ein Semikolon in der Mitte der Liste, was inkorrekt ist. In der Tat brauchen Sie kein Semikolon. Ich würde auch das ~ mit dem absoluten Pfad zu deinem Haus ersetzen, nur für den Fall, und die Semikolons alle zusammen entfernen. Komm einfach zwischen jedem Pfad.

Oh, und um ein Verzeichnis für die Tags-Datei zu suchen, brauchen Sie "../tags", nicht "./tags". Ein einzelner Punkt bedeutet das aktuelle Verzeichnis, zwei Punkte bedeuten das Verzeichnis, in dem Sie sich befinden.

+0

Könnten Sie genau posten, wie Sie es neu erstellt haben, da ich es scheinbar nicht zum Laufen bringen kann? –

+0

Öffnen Sie die Datei aus dem Projektstamm oder aus dem Unterverzeichnis? Ich öffne die Datei innerhalb eines Unterverzeichnisses im Projekt, nicht im Projektstammverzeichnis. –

+0

Dies ist, was ich habe: set Tags =./TAGS,./Tags, Tags, TAGS, ~/Programmierung/mandelbrot/main/Tags wo das letzte Verzeichnis ist der absolute Pfad. Wie ich oben erwähnt habe, wird es nicht in irgendwelchen Elternverzeichnissen suchen, da ich ../tags nicht verwende. – Derek

0

Befindet sich die Tag-Datei immer im Projektverzeichnis? Wenn dies der Fall ist, müssen Sie nicht nach der Tag-Datei suchen. Nur schwer Code den Pfad zu beiden Dateien wie folgen aus:

set tags=/home/you/projects/foo/tags;/home/you/some/arbitrary/path/tags 

Wenn nicht, können Sie so etwas wie dies versuchen:

set tags=/home/you/projects/**;/home/you/projects,/home/you/some/arbitrary/path/tags 

ich nicht versucht habe, dies so könnte man damit experimentieren. Es gibt einige Voraussetzungen dafür. Siehe: Hilfedatei-Suche.

0

Die einzelne Zeilensyntax für Set-Tags sein sollte:

set tags=./tags,tags;,~/some/arbitrary/path/tags 

Das Komma nach fehlte "Tags";

Verwandte Themen