Как удалить теги HTML, а не содержимое в Vim

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

<p>Hello stackoverflow!</p>

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

Hello stackoverflow!

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

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

Ответ 1

Если установлен плагин surround.vim, нажмите d s t на d elete s навигация t ag.

Подобные ярлыки:

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

и т.д.

Ответ 2

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

yitvatp

Что это такое:

  • y - yanks
  • it - внутренняя часть тега
  • vat - выбирает весь тег
  • p - вставляет ранее дернутый текст поверх него

Ответ 3

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

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

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

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.