Шукайте певний вид мітки в Vim

Ось моя проблема. Я отримую розкішні ctag, що працюють з Vim, і це працює в більшості випадків. Одна справа, що все одно мене турбує, коли я намагаюся знайти функцію, яка називається такою ж, як імена змінної. Я іноді отримую правильний тег на першій спробі, а іноді й не. Потім після того, як я витягнув список альтернативних тегів за допомогою : tselect , він містить список тегів для обох функцій або визначень/присвоєнь змінних. (Я в PHP, так що визначення та присвоєння синтаксично не відрізняються).

Однак я помічаю, що є стовпець з назвою "добро", що має значення "f" або "v", для функції та змінної, відповідно. Я, здається, не знаходжу багато інформації про це поле, здається, що це може бути не точно стандартизованим або широко використовуваним. Моє запитання: чи можна фільтрувати результати тегів у Vim на "добрий"?

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

Це така маленька проблема для мене, як це часто не відбувається, але іноді це невеликі проблеми, які вас дійсно дратують.

6
Навіть якщо б ви міг створити файл тегів, який має достатньо інформації, щоб розрізняти все, це лише половина битви, і ніхто, здається, не зосереджений на іншій половині. Інша половина - для Vim, щоб враховувати контекст, з якого ви шукаєте тег, і автоматично шукати лише певний тип тегу на основі контексту. Наскільки я знаю, Vim автоматично не робить нічого в цьому відношенні, і я ніколи не бачив нікого, хто намагався налаштувати Vim на роботу таким чином.
додано Автор still_dreaming_1, джерело
Це повідомлення в блозі виглядає багатообіцяючим у відповідності до того, що ви (і я) виконуєте: andrewradev.com/2011/10/15/ …
додано Автор icc97, джерело

3 Відповіді

Безумовно, ви можете створити файли ctag з будь-якою комбінацією потрібних php-типів (див. Виведення команди ctags --list-types .).

Якщо ви вважаєте, що це коштує зусиль, ви можете зробити vim function tagkind і прив'язати його до команди. Функція tagkind може перезаписати поточну tags vim змінну, щоб вказати тільки файл тегів із тими, які вас цікавлять, і зателефонувати : tag. За бажанням, він може зберігати попередню версію змінної tags та відновлювати її після цього одного дзвінка.

На жаль, я нічого не знаю, крім цього. Можливо хтось інший знає.

5
додано
Цікава ідея - працює для мене. Якщо хтось турбується, я складаю свій фрагмент коду .vimrc на gist.github.com/1349053 Я не дуже вправний у vimscript, але, здається, це досить добре для мене.
додано Автор Jonathan, джерело

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

Ви можете прочитати : help tag-priority . Очевидно тег "найвищий пріоритет" вибирається на підставі деякої жорстко кодованої логіки.

5
додано

fzf з fzf.vim має : Теги (для всього проект) і : BTags для поточного параметра файлу, який генерує ctags на льоту.

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

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

Зверніть увагу, як мій коментар до питання, є потенційний Vim tagfinder.vim через публікацію блогу на Vim та Ctags: пошук визначень тегів . Але я цього не пробував.

0
додано