Как перемещаться по нескольким матчам ctags в Vim?

Я использую Ctrl-] в Vim для навигации с помощью Ctags. Как перейти к альтернативному файлу, если есть несколько совпадений?

Ex. something.publish в кодовой базе, содержащей несколько вхождений publish:

class Foo
  def publish
  end
end

class Bar
  def publish
  end
end

4 ответов


:tn[ext] переходит к следующему тега :tp[revious] переходит к предыдущему. :ts[elect] дает вам список на выбор.

:help tag-matchlist для более интересных и захватывающих вещей, чтобы попробовать!


использовать g] вместо C-] чтобы получить список всех матчей.

вы можете прочитать :help g]


добавление ответа, который я в конечном итоге искал, если это поможет другим:

g<C-]> перейдет к тегу, если есть только одно совпадение, и представит список, если есть несколько совпадений.

я добавил это отображение моего .vimrc, чтобы сделать его делать то, что я хочу по умолчанию:

nnoremap <C-]> g<C-]>


ltag

ltag the_tag_name
lopen

открывает окно расположение с тегом соответствует.

это особенно мощный с регулярным выражением поиска тегов:

ltag /tag_na
lopen

в котором будут перечислены все теги, содержащие строку tag_na (включая the_tag_name).

вы можете продолжить поиск внутри списка местоположения, прежде чем нажать enter, чтобы перейти к тегу.

чтобы использовать его для слова под курсором, вы можете определите карту:

nnoremap <leader>l exec("ltag ".expand("<cword>"))<CR>

тогда, если вы таб маньяк, как я:

command! -nargs=1 Ltag silent ltag <args> | execute "normal \<C-o>" | tab lopen

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

:Ltag /my_struct