web-dev-qa-db-ja.com

VimのコンテンツではなくHTMLタグを削除する方法

Vimで開いたファイルに次のコードがあります。

<p>Hello stackoverflow!</p>

<p>タグと</p>タグを削除し、それらの間に内容を保持するにはどうすればよいですか?つまり、最後に何を押す必要がありますか。

Hello stackoverflow!

私は押すことを知っています dit 反対になります。

Janus を使用しています。

65
retro

surround.vim プラグインがインストールされている状態で、 dst todeletesurrounding tag。

同様のショートカット:

  • ds( -周囲の括弧を削除します()
  • ds" -周囲の二重引用符を削除します""
  • ds' -周囲の一重引用符を削除します''

等々...

81
Benoit

簡単な解決策は次のとおりです(タグ内の任意の場所にカーソルを置きます)。

yitvatp

これは何をしますか:

  • y-ヤンク
  • it-タグの内側
  • vat-タグ全体を選択します
  • p-以前にヤンクされたテキストをその上に貼り付けます
83
Randy Morris

ランディの(+1)の答えが大好きで、タグブロックについて学びました!これは単なる補足的な答えです。

つまり、yitは「内部タグブロックをヤンクする」を意味し、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.
6
Rob

これを選択したキーにマップします。

vat<Esc>da>`<da>

http://vim.wikia.com/wiki/Delete_a_pair_of_XML/HTML_tags から取得

4
Fredrik Pihl

より大きなhtmlブロックでsurround.vimを使用してdstソリューションを試しました。動作しますが、すべての子タグを同じレベルにインデントします。インデントを変更するべきではなく、すべてを台無しにします。

Yitvatpを使用したRandysソリューションも機能しますが、貼り付けたタグの前後に空白行が残ります。

そこに完璧な解決策はありますか?

0
jensbambauer