Перейти к соответствующим тегам XML в Vim

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

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

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

Ответ 1

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

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

Ответ 2

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

  • поместите курсор на тег
  • 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|
    ...

Ответ 3

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

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

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

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

Ответ 4

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

yit`] 

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

и

yit

чтобы перейти вправо после открытия тега

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