在vim中包含带有HTML标记的部分

时间:2012-11-12 18:25:58

标签: html vim plugins

我希望能够使用其他标签快速包装HTML的整个部分。当我意识到我需要一个围绕我的其他div的外部div时,我会遇到很多这样的事情:

原始HTML:

<div id='a'>
   <img src='a.png'>
</div>
<div id='b'>
   <img src='b.png'>
</div>

修改后的HTML:

<div id='Main'>
   <div id='a'>
      <img src='a.png'>
   </div>
   <div id='b'>
      <img src='b.png'>
   </div>
</div>

我可以使用matchit.vimsurround.vim,但我不相信surround.vim包含单词(即<div>),只包含单个字符(即。< )它也没有缩进。

我现在能想到的最接近的事情是按下15-20次按钮。

2 个答案:

答案 0 :(得分:7)

surround.vim可以包含h​​tml标记,但只有在使用S视觉模式而不是ys而不是{{1}时,才会缩进缩进在视觉上,感谢@RandyMorris。如果s的运动或使用的视觉选择是线性的,它还会在下一行和前一行(不缩进)上放置相同的缩进div。对ys这样做不会这样做,所以如果你真的想避开视觉模式,你必须使用yss

更新:有ysg@<div>j>>g:surround_indent选项。如果您设置其中任何一个,则环境.vim将使用b:surround_indent缩进包围的文本及其周围环境,而上述混乱=非缩进将为false,以及ys({{ 1}}也会使用S。需要S和正确的缩进设置。

如果您未设置这些选项,您将看到第一段中描述的行为:=无条件缩进。

答案 1 :(得分:3)

是的,环绕确实是要走的路。假设您的光标位于第一个div

V%j%S<div id="Main"<CR>

V5jS<div id="Main"<CR>

做到这一点。

根据具体情况,整个事情甚至可以缩短为:

Vat<div id="Main"<CR>

<div id="Main"部分似乎很难跳过。

当然还有其他方法。

ZenCoding例如允许您使用CSS语法:

V5j<C-y>,div#Main<CR>

我不知道有任何更快的方式来获得你想要的东西。

TextMate的 Control Shift w 很不错,这是肯定的,但它默认为<p>所以你必须无论如何都要输入{​​{1}}。