如何删除HTML标签,而不是Vim中的内容


69

我在打开的文件中有以下代码Vim

<p>Hello stackoverflow!</p>

如何删除<p></p>标记,但保持它们之间的内容?也就是说,我应该按什么结尾:

Hello stackoverflow!

我知道按d i t会相反。

我正在使用Janus

Answers:


93

随着surround.vim插件安装,按d s td elete小号urrounding牛逼股份公司。

类似的快捷方式:

  • d s ( -删除括号 ()
  • d s " -删除周围的双引号 ""
  • d s ' -删除周围的单引号 ''

等等...


那是我的解决方案。谢谢。
复古

1
这应该是最受好评的答案,因为这些天每个人都应该使用TPopes很棒的插件!:)
Walialu 2014年

我知道di…da…但是我才知道ds…。太有用了!
Jordi Nebot

90

一个简单的解决方案是(将光标放在标签内的任意位置):

yitvatp

这是什么:

  • y -拉
  • it -标签内部
  • vat -选择整个标签
  • p -将先前选中的文本粘贴到其上

真的很好,兰迪!我正在使用Surround.vim插件,所以Benoit的答案对我来说真的是解决方案。
复古

1
非常好。我发布了补充答案,以提供更多细节。谢谢兰迪!
罗布

超!我几乎准备好问类似的问题,但找到了答案。谢谢!
Nikolay Fominyh 2012年

yitvatp = at表示强制。
10gistic 2014年

6

爱兰迪(+1)的答案,我刚刚了解了标签块!这只是一个补充答案。

所以YIT手段“猛拉内标签块”和增值税的手段“去可视化模式并选择一个(整体)标签块”。

这仅适用于那些懒于阅读帮助文件的人:

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.


0

我在更大的html块上尝试了Surround.vim的dst解决方案。它可以工作,但是会将所有子标记缩进相同的级别。它不应该改变缩进,弄乱一切。

带有yitvatp的Randys解决方案也可以使用,但是在粘贴的标签前后都留有空白行。

有什么完美的解决方案吗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.