6

Я пишу довольно много взаимосвязанного не кодового текста в vim, и я хотел бы создать свои собственные теги для использования с тегами vim.

Например, есть файл о "foo", и в идеале, когда бы я ни редактировал файлы "bar" и "baz" и появлялось слово "foo", я хотел бы иметь возможность нажать ^] и перейти к файлу foo, а затем нажать ^ T и вернуться туда, где я был.

Могу ли я создать свои собственные файлы тегов, где слово "foo" указывает на файл "foo" и так далее и тому подобное? Каждый источник, который я проверил, просто объясняет, как использовать ctags для генерации тегов для каждого языка программирования под солнцем, но я просто хотел бы иметь возможность создать свой собственный простой файл тегов.

4 ответа4

5
:help tags-file-format

даст вам несколько советов о том, как написать файл тегов. Но вам нужны строки вроде:

tagname TAB tagfile TAB location

Расположение может любая команда Ex; это может быть номер строки, но обычно это шаблон поиска, например /\<foo\>/ или /^Where is foo?$/ чтобы теги не нуждались в регенерации каждый раз, когда вы редактируете свои файлы.

3

Если я правильно понял (и это заглавная буква IF), то, что вы ищете, это базовая функциональность vim help. Вы определяете тег (some_word) для большого количества jumppoints (| jumppoint |) и все.

Не вдаваясь в подробности, я бы порекомендовал вам посмотреть через

:help tags

файл справки. Это многое объяснит. Я давно этого не делал, но в основном все сводится к этому. Вам нужно определить теги (**), а затем ввести их в систему тегов vim с помощью команды :helptags . После этого не перемещайте их, и при использовании jumppoints это приведет вас к ним через уже упомянутые Ctrl-] и T.

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

2

Я хотел написать несколько документов с функциями тегов, которые есть в справке vim, но я не смог найти в Интернете ничего, что имело бы простое и конкретное решение. Поэтому для тех, кто в данный момент ищет быстрое решение этой проблемы, я поделюсь тем, что нашел.

Самый быстрый способ начать работу:

Допустим, вы работаете в пустой папке.

Если вы создаете файл, такой как этот test.txt:

|topic1|
*topic1*

Затем запустите:

:helptags ./

Vim сгенерирует файл (теги) в текущем каталоге (./), который позволит вам перейти (ctrl+]) из | topic1 | к * topic1 *

Если вы откроете файл тегов, вы увидите его простоту:

topic1   test.txt    /*topic1*

Формат:

[key word][TAB][file][TAB][command]

Вы можете добавить другие теги в этот файл, и они будут работать сразу.

Конечно, лучшая часть тегов - это возможность перехода к определениям в других файлах, что может быть достигнуто путем изменения аргумента [file] в файле тегов. Опять же, вам нужно будет иметь | тег | в родительском файле и * тег * в дочернем файле для его работы.

Запись файла тегов с нуля также, кажется, работает без проблем, если он называется "теги", и вы запускаете:helptags ./ в vim впоследствии.

Замечания:

Как уже упоминалось в этом посте,: помощь - ваш друг. Если вам нравится vim, вы должны потратить некоторое время на просмотр руководства, все очень хорошо задокументировано. Если вам не нравится vim, вы можете использовать руководство для быстрого поиска. По моему опыту, я обычно могу найти решение через страницы справочника быстрее, чем при поиске в Интернете. Просто запомните следующее:

/

начать поиск

ctrl+]

перейти к файлу / определению

ctrl+o

прыгать назад

Эти основные команды навигации также отображаются при открытии:help

0

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

Я использую скрипт командной строки php для сканирования своего кода и генерирования тегов в этом формате, выводя строки:"$ tagname\t $ filepath\t $ lineNo\n"; в файл тегов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .