2010-02-22 12 views
5

zainstalowałem vim 7.2 i ctags 5.8 i utworzyłem plik tagów za pomocą "ctags -R/foopath".Próbując przejść do definicji klasy/funkcji w vim

mam wiele metod, które są wywoływane z tej samej nazwie w kilku klasach, więc jeśli mogę umieścić kursor w wywołanie funkcji i wykonaj „: tag” pokazuje pierwszy znaczników wymienionych. Jeśli i uruchomię ": tn" kilka razy, w końcu znajduję metodę ..

Moje pytanie brzmi: czy istnieje jakiś sposób, aby pokazać bezpośrednio ścieżkę, gdzie jest klasa, która zawiera właściwą metodę, którą wzywam ?

Odpowiedz

3

:tselect tagname wyświetli listę pasujących znaczników, a Ty możesz wprowadzić numer tagu, który chcesz.

:stselect tagname najpierw podzieli okno.

Możesz także umieścić kursor na wyrazie i wpisać g], aby uzyskać listę tagów pasujących do tego słowa.

<CTRL-W>] podzieli okno i przejdzie do pierwszego znacznika pasującego do słowa pod kursorem.

<CTRL-W>g] podzieli okno i wyświetli listę dopasowań.

+0

Dzięki, Dave, ale myślę, że mnie nie rozumiesz, a może nie wyjaśniłem dobrze. Zobaczmy: Wyobraź sobie, że otagowałem kilka klas (klasa 1, klasa 2, klasa 3 itd.), Które mają metodę foo(). Jeśli mam ten kod: $ class3_object = new class3(); class3_object-> foo(); Chciałbym pójść _directly_ do znacznika odpowiadającego klasie 3, ponieważ jest to klasa obiektu "class3_object". Javi – ziiweb

0

Możesz odczytać nieprzetworzone dane z tagów do bufora z taglistą(). Następnie możesz wyszukać w buforze inne kryteria, które Cię interesują, w tym nazwy klas i części katalogu plików.

Tak, aby mieć bardziej wyrafinowane wyszukiwania dla „MyTag” Spróbuj:

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

aby uzyskać jak najwięcej informacji, należy użyć Exuberant Ctags.

Po wyszukaniu danych, które chcesz, zobaczysz nazwę pliku skojarzonego z tagiem ustalonej z „pliku”: oraz tekst wiersza z przedrostkiem „cmd”:.

Umieszczenie go w funkcji z kodem do upiększania i obsłużyć bufor odpowiednio:

" 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 

Można użyć połączeń BrowseTags („^ MyTag $”) uruchomić funkcję dokładną mecz z myTag lub użyj wyrażenia regularnego, aby uzyskać podobne dopasowania.

Mimo że nigdy tego nie robiłem, pisanie różnych poleceń zautomatyzować najczęstsze zadania bez otwierania bufora nie jest trudne.