Поиск определенного типа тега в Vim - PullRequest
6 голосов
/ 28 октября 2011

Так вот моя проблема. Я получил отличные ctags, работающие с Vim, и они прекрасно работают большую часть времени. Одна вещь, которая все еще раздражает меня, - это всякий раз, когда я пытаюсь найти функцию, которая названа так же, как имя некоторой переменной. Иногда я получаю правильную метку с первой попытки, иногда нет. Затем, после того, как я выбрал список альтернативных тегов с :tselect, появился список тегов для определений функций или определений / назначений переменных. (Я нахожусь в PHP, поэтому определения и назначения синтаксически неразличимы).

Однако я заметил, что есть столбец с надписью «kind», который имеет значение «f» или «v» для функции и переменной соответственно. Кажется, я не могу найти много информации об этой области, похоже, что она не совсем точно стандартизирована или широко используется. Мой вопрос: можете ли вы отфильтровать результаты тегов в Vim по "kind"?

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

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

Ответы [ 3 ]

5 голосов
/ 29 октября 2011

Я генерирую теги Python с --python-kinds=-i, чтобы исключить теги для операторов импорта (которые бесполезны). Может быть, вы можете сгенерировать с помощью --php-kinds=-v и полностью удалить класс тегов.

Вы можете прочитать :help tag-priority. Видимо, тег «наивысший приоритет» выбирается на основе жестко закодированной логики.

5 голосов
/ 28 октября 2011

Вы можете сгенерировать ctag-файлы с любой комбинацией php-типов, которую вы хотите (см. Вывод команды ctags --list-kinds.)

Если вы чувствуете, что оно того стоит, вы можете сделать функцию vim tagkind и связать ее с командой. Функция tagkind может перезаписать текущую переменную tags vim так, чтобы она указывала только на файл тега с интересующими вас видами, и вызывать :tag.. При желании она может сохранить предыдущую версию переменной tags и восстановить это после этого одного звонка.

К сожалению, я не знаю ничего, кроме этого. Возможно, кто-то еще узнает.

0 голосов
/ 12 сентября 2017

fzf с fzf.vim имеет :Tags (для всего проекта) и :BTags для текущего параметра файла, который генерирует ctags на лету.

Проблема с плагином ' Пропустить типы тегов в: BTags and: Tags ' дает следующий код, который вы можете использовать только для сгенерированных тегов для определенного вида. Я изменил приведенное ниже, так что он должен искать только вид PHP f.

command! BTagsEnhanced
        \ call fzf#vim#buffer_tags(<q-args>, [
        \ printf('ctags -f - --sort=no --php-kinds=f --excmd=number --language-force=%s %s', &filetype, expand('%:S'))], {})

Обратите внимание, что согласно моему комментарию к этому вопросу, существует потенциальный плагин Vim tagfinder.vim через сообщение в блоге на Vim и Ctags: поиск определений тегов . Но я не пробовал.

...