Попытка перейти к определению класса / функции в vim - PullRequest
5 голосов
/ 22 февраля 2010

Я установил vim 7.2 и ctags 5.8 и создал файл тегов с помощью "ctags -R /foopath".

У меня есть много методов, которые вызываются с одним и тем же именем в нескольких классах, поэтому, если я помещаю курсор в вызов функции и выполняю ": tag", он показывает first из перечисленных тегов. Если я выполню ": tn" несколько раз, я наконец найду метод ..

Итак, мой вопрос: есть ли способ показать напрямую путь, где находится класс, содержащий правильный метод, который я вызываю?

Ответы [ 2 ]

3 голосов
/ 23 февраля 2010

:tselect tagname выдаст вам список подходящих тегов, и вы сможете ввести номер нужного тега.

:stselect tagname сначала разделит окно.

Вы также можете навести курсор на слово и ввести g], чтобы получить список тегов, соответствующих этому слову.

<CTRL-W>] разделит окно и перейдет к первому тегу, соответствующему слову под курсором.

<CTRL-W>g] разделит окно и выдаст вам список совпадений.

0 голосов
/ 07 июня 2011

Вы можете прочитать необработанные данные из тегов в буфер с помощью taglist (). Затем вы можете искать в буфере другие критерии, которые вас интересуют, включая имена классов и части каталога файлов.

Для более точного поиска "mytag" попробуйте:

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

Чтобы получить больше информации, обязательно используйте Exuberant Ctags .

После поиска нужных данных вы увидите имя файла, связанное с тегом с префиксом 'filename': и текст строки с префиксом 'Cmd': 1018 *.

Помещение в функцию с некоторым кодом для украшения и правильной обработки буфера:

" 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

Вы можете использовать call BrowseTags ("^ myTag $") , чтобы запустить функцию для точного совпадения myTag , или используйте регулярное выражение для получения похожих совпадений.

Хотя я никогда не удосужился сделать это, не так уж сложно написать различные команды для автоматизации ваших самых распространенных задач без открытия буфера.

...