2010-02-22 11 views
5

Ich habe vim 7.2 und ctags 5.8 installiert und die Etikettendatei mit "ctags -R/foopath" erstellt.Versuch, zur Definition der Klasse/Funktion in vim zu gehen

Ich habe viele Methoden, die mit dem gleichen Namen in mehreren Klassen genannt werden, so dass, wenn ich die Cursor in einem Funktionsaufruf setzen und ich ausführen „: tag“ es zeigt die ersten der aufgelisteten Tags. Wenn ich ": tn" mehrere Male ausführen, finde ich schließlich die Methode.

So meine Frage ist: gibt es eine Möglichkeit, direkt der Pfad anzuzeigen, wo ist die Klasse, die die richtige Methode enthält, die ich rufe ?

Antwort

3

:tselect tagname wird Ihnen eine Liste der passenden Tags geben, und Sie können die Nummer des gewünschten Tags eingeben.

:stselect tagname wird das Fenster zuerst teilen.

Sie können den Cursor auch auf ein Wort setzen und g] eingeben, um eine Liste der mit diesem Wort übereinstimmenden Tags zu erhalten.

<CTRL-W>] wird das Fenster teilen und zum ersten Tag gehen, der dem Wort unter dem Cursor entspricht.

<CTRL-W>g] wird das Fenster teilen und Ihnen die Liste der Übereinstimmungen geben.

+0

Danke Dave, aber ich denke, du hast mich nicht verstanden oder vielleicht habe ich nicht richtig erklärt. Lassen Sie sehen: Stellen Sie sich vor, ich habe mehrere Klassen (Klasse1, Klasse2, Klasse3, usw.) markiert, die die Methode foo() haben. Wenn ich diesen Code habe: $ class3_object = new class3(); class3_object-> foo(); Ich möchte _directly_ zu dem Tag, das der Klasse3 entspricht, gehen, weil es die Klasse des Objekts "class3_object" ist. Javi – ziiweb

0

Sie können die Rohdaten der Tags in einen Puffer mit taglist() lesen. Dann können Sie im Puffer nach anderen Kriterien suchen, an denen Sie interessiert sind, einschließlich Klassennamen und Teilen des Dateiverzeichnisses.

So eine verfeinerte Suche „mytag“ Versuch haben:

:new | put =taglist(\"^mytag$\") 

die meisten Informationen zu erhalten, müssen Sie Exuberant Ctags verwenden. und die Zeile Text mit dem Präfix ‚cmd‘:

Nachdem Sie die Daten suchen, die Sie wollen, müssen Sie den Dateinamen mit dem Tag mit ‚Dateiname‘ Präfix zugeordnet sind.

Putting es in einer Funktion mit einigen Code den Puffer richtig zu verschönern und zu handhaben:

" List information about matching tags in a buffer 
function! BrowseTags(tagStr) 
    new [Tag Brower] 
    setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile nowrap 

    put =taglist(a:tagStr) 

    " Beautify it a little 
    normal 1G 
    while search('^{', 'W') 
    call setline(".", split(getline("."), "\\(\\(}$\\)\\|\\('\\w\\+':\\)\\)\\@=")) 
    endw 
    normal 1G 
endfunc 

Sie Anruf BrowseTags verwenden können ("^ MyTag $") die Funktion für eine exakte laufen Übereinstimmung von myTag, oder verwenden Sie einen regulären Ausdruck, um ähnliche Übereinstimmungen zu erhalten.

Obwohl ich mich nie darum gekümmert habe, ist es nicht zu schwierig, verschiedene Befehle zu schreiben, um Ihre häufigsten Aufgaben zu automatisieren, ohne einen Puffer zu öffnen.