Заставьте ctags в энергии переходить к определению, не объявлению

«Java Sucks» - да, я знаю, что мнение определенно не поддерживается всеми:)

Я придерживаюсь этого мнения, потому что большинство приложений Java, которые я видел, - это память свиньи, бегите медленно, ужасный пользовательский интерфейс и т. д.

G-Man

48
задан Undo 19 November 2013 в 04:17
поделиться

5 ответов

Я думаю, что проще всего использовать "g ctrl-]" вместо просто "ctrl-]". Если есть только одно совпадение, оно приведет вас туда. Если есть несколько совпадений, он перечислит их все, позволяя вам выбрать тот, который вам нужен, например: tselect. Лучший из двух миров. :)

71
ответ дан 26 November 2019 в 18:45
поделиться

У вас должна быть возможность использовать tn и tp для перехода к различным совпадающим тегам.

  • Нажмите ^] , чтобы перейти к первому совпадению.
  • Если это не то совпадение, которое вам нужно, введите : tn , чтобы перейти к следующему.
  • Если вы набрали : tn тоже много раз вы можете вводить : tp , чтобы вернуться к предыдущему.
9
ответ дан 26 November 2019 в 18:45
поделиться
:tselect my_little_function 

, и вы получите список совпадений. или если вы перейдете к тегу и вас это не устроит, введите

:tselect

И вы получите список альтернатив для последнего активного тега.

1
ответ дан 26 November 2019 в 18:45
поделиться

Я считаю, что Vim по умолчанию переходит к первому тегу в файле тегов. Вы можете выбрать другой, если хотите: используйте : tj (аналогично: tselect, но автоматически переходите, если есть только одно совпадение) или Ctrl -] , за которым следует : tn ).

Единственный способ изменить значение по умолчанию - изменить порядок файлов тегов, но я не верю, что ctags предлагает для этого параметр командной строки.

Это не ' Как бы сложно это ни звучало, поскольку вам в основном нужен сценарий, который открывает файл тегов, сортирует его по «типу» тега и снова записывает его. «Тип» в теге - это единственный символ, описывающий, является ли это функцией (f), прототипом функции (p), макросом, перечисляемым именем и т. Д. И т. Д. И т. Д. И т. Д. И т. Д. Если вы используете Linux, это могло бы быть: теоретически , быть таким простым, как:

#!/bin/sh
ctags -R -f - . | tac > tags

Поскольку tac меняет порядок строк в файле на обратный, это автоматически помещает определение первым. Однако это становится немного сложнее, так как заголовок необходимо поддерживать, а Vim предпочитает, чтобы файл тегов был отсортирован, поэтому лучше просмотреть файл и отсортировать его по первой записи (имени тега) в прямом порядке, а затем вид в обратном порядке. Поэтому что-то более сложное может быть лучше.

Я прошу прощения за бессовестный плагин, но я написал плагин Vim, который (косвенно) делает то, что вам нужно. Он предназначен для добавления большого количества дополнительных групп выделения для таких вещей, как имена функций, макросы, перечисления и т. Д. Однако одна из других вещей, которые это делает, - это повторная сортировка файла тегов, чтобы реализация функции была перед объявлением функции, тем самым достигнув желаемого (у меня была такая же потребность, как и у вас). Если вам не нужны какие-либо функции выделения, вы, вероятно, можете легко избавиться от всего этого: это довольно простая программа на Python и еще более простой сценарий Vim, доступный на моем сайте .

8
ответ дан 26 November 2019 в 18:45
поделиться

Этот вариант мне подошел больше

Поместите следующую строку в .vimrc и теперь вы можете использовать двойной щелчок мыши (на переменной/вхождении в вашем файле) для перехода к помеченному месту. Если найдено одно совпадение, то переход будет выполнен сразу. Если совпадает несколько записей, программа попросит пользователя ввести данные.

:map <2-LeftMouse> g< c-]>
1
ответ дан 26 November 2019 в 18:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: