Как удалить теги HTML, а не содержимое в Vim - PullRequest
58 голосов
/ 07 июня 2011

У меня есть следующий фрагмент кода в файле, который я открыл в Vim:

<p>Hello stackoverflow!</p>

Как я могу удалить теги <p> и </p>, но сохранить содержимое между ними?То есть, что я должен нажать, чтобы закончить:

Hello stackoverflow!

Я знаю, что нажатие d i t сделает противоположное.

Я использую Янус .

Ответы [ 5 ]

83 голосов
/ 07 июня 2011

Простое решение будет (с курсором в любом месте внутри тега):

yitvatp

Что это делает:

  • y - янки
  • it - внутри тега
  • vat - выделяет весь тег
  • p - вставляет поверх него ранее выдернутый текст
77 голосов
/ 07 июня 2011

С установленным плагином surround.vim нажмите d s t до d elete s urrounding t ag.

Похожие ярлыки:

  • d s ( - удалить окружающие скобки ()
  • d s " - удалить окружающие двойные кавычки ""
  • d s ' - удалить окружающие одинарные кавычки ''

и т. Д. ...

6 голосов
/ 07 июня 2011

Люблю ответ Рэнди (+1), и я только что узнал о блоках тегов!Это просто дополнительный ответ.

Таким образом, yit означает «блок внутреннего тега yank», а vat означает «перейти в визуальный режим и выбрать a (весь) блок тега».

Это только для тех,которые лень читать файл справки:

Tag blocks                      *tag-blocks*

For the "it" and "at" text objects an attempt is done to select blocks between
matching tags for HTML and XML.  But since these are not completely compatible
there are a few restrictions.

The normal method is to select a <tag> until the matching </tag>.  For "at"
the tags are included, for "it" they are excluded.  But when "it" is repeated
the tags will be included (otherwise nothing would change).  Also, "it" used
on a tag block with no contents will select the leading tag.

"<aaa/>" items are skipped.  Case is ignored, also for XML where case does
matter.

In HTML it is possible to have a tag like <br> or <meta ...> without a
matching end tag.  These are ignored.

The text objects are tolerant about mistakes.  Stray end tags are ignored.
4 голосов
/ 07 июня 2011

Сопоставьте это с ключом на ваш выбор:

vat<Esc>da>`<da>

Взято из http://vim.wikia.com/wiki/Delete_a_pair_of_XML/HTML_tags

0 голосов
/ 29 марта 2018

Я пробовал dst решение с Surround.vim на более крупном блоке HTML. Это работает, но отступает все дочерние теги на одном уровне. Это не должно изменить отступ, все портит.

Решение Randys с yitvatp тоже работает, но я оставляю пустую строку до и после вставленного тега.

Есть идеальное решение?

...