Перейти к соответствующим тегам XML в Vim - PullRequest
136 голосов
/ 01 февраля 2009

Vim % оператор переходит на соответствующие скобки, комментарии заканчиваются и некоторые другие вещи. Однако он не соответствует тегам XML (или любым другим тегам, насколько мне известно).

Как лучше всего перейти на соответствующий тег XML с помощью Vim?

Примечание: Что я действительно хочу сделать, так это продублировать раздел в файле XML без ручного поиска соответствующего тега.

Ответы [ 4 ]

229 голосов
/ 04 июня 2012

Вы можете сделать это без дополнительных плагинов:

  • навести курсор на тег
  • v a t - выберет (внешний) тег и поместит курсор в конец
  • как только вы получили свой выбор, вы можете переключаться между верхом и низом с помощью o ( обновление на основе заметки Майкла Грубера )
  • c - изменить или, y - скопировать или, выйти для выхода из визуального режима ...

Еще одна полезная операция: v i t - выберет содержимое тега (внутренний).

Обновление (спасибо @elrado) Пример: v i t o позволит вам выберите внутреннее содержимое тега и поместите курсор в начало выделенного текста.

Ссылка: https://superuser.com/questions/182355/how-can-i-select-an-html-tags-content-in-vim

Ссылка на Vim (спасибо @Geek за это):

:help visual-operators

вы получите:

4. Operating on the Visual area             *visual-operators*

The objects that can be used are:
    ...
    at  a <tag> </tag> block (with tags)        |v_at|
    it  inner <tag> </tag> block            |v_it|
    ...
72 голосов
/ 01 февраля 2009

Существует плагин vim под названием matchit.vim. Вы можете найти его здесь: http://www.vim.org/scripts/script.php?script_id=39. Он был создан в точной цели, которую вы описываете.

Установите это, поместите курсор на тело тега (не на <>, иначе он будет соответствовать) и нажмите%, чтобы перейти к другому тегу. См. Страницу сценария, чтобы узнать, что еще соответствует.

36 голосов
/ 31 октября 2011

ОП заявил, что он действительно хотел скопировать секцию XML без необходимости искать соответствующий тег. Это легко сделать в обычном режиме с помощью yat<motion>p, который возвращает текст внутри и включает в себя соответствующие теги, а затем вставляет его. yit<motion>p - почти то же самое, но не включает внешние теги.

'y' в строке - это, конечно, команда «yank» в обычном режиме. (:help y)

a или i могут использоваться для выбора объекта после оператора, такого как y или внутри визуального выбора. Символ после a или i указывает, что следует выбрать. Используемый здесь тип объекта t обозначает тег SGML. (:help object-select).

Конечно, <motion> просто означает перемещение куда-либо с помощью вашего выбора, и p помещает выдернутый текст в это место.

5 голосов
/ 14 мая 2015

Просто мой трюк с использованием "yank", "object-select" (tag select) и "перейти к последнему рывку текста".

yit`] 

для перехода вправо перед закрытием тега

и

yit

для перехода сразу после открытия тега

Примечание: это изменит содержимое регистра по умолчанию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...