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

puk*_*puk 3 html vim plugins

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

原始HTML:

<div id='a'>
   <img src='a.png'>
</div>
<div id='b'>
   <img src='b.png'>
</div>
Run Code Online (Sandbox Code Playgroud)

修改后的HTML:

<div id='Main'>
   <div id='a'>
      <img src='a.png'>
   </div>
   <div id='b'>
      <img src='b.png'>
   </div>
</div>
Run Code Online (Sandbox Code Playgroud)

我可以使用matchit.vimsurround.vim,但我不相信surround.vim环绕着单词(即.<div>),只是单个字符(即.<),它也不会缩进.

我现在能想到的最接近的东西需要按下15-20个按钮.

ZyX*_*ZyX 7

surround.vim可以用html标签包围,但是只有在使用视觉模式时才会缩进缩进S,ys而不是s在视觉上,这要归功于@RandyMorris.如果使用的运动ys或视觉选择是线性的,它还会在下一行和前一行(不缩进)上放置相同的缩进div .即使这样做也没有yss,所以ysg@<div>j>>如果你真的想要避免视觉模式,你必须使用.

更新:有g:surround_indentb:surround_indent选项.如果你设置其中任何一个环绕=.vim 将使用缩进包围的文本与周围环境和上面ys没有缩进的混乱将是假的,以及S(S也将使用=).需要filetype indent on和适当的缩进设置.

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

  • @puk使用行选择模式('V')选择行,然后点击大写'S'.这允许您在命令行上输入标签,当标签关闭时环绕周围环境并缩进选定的行. (4认同)

rom*_*inl 6

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

V%j%S<div id="Main"<CR>
Run Code Online (Sandbox Code Playgroud)

或者

V5jS<div id="Main"<CR>
Run Code Online (Sandbox Code Playgroud)

做的伎俩。

根据上下文,整个事情甚至可以缩短为:

Vat<div id="Main"<CR>
Run Code Online (Sandbox Code Playgroud)

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

当然,还有其他方法。

例如,ZenCoding 允许您使用这样的 CSS 语法:

V5j<C-y>,div#Main<CR>
Run Code Online (Sandbox Code Playgroud)

我不知道有什么更快的方法可以得到你想要的东西。

TextMateControlShiftw很好,这是肯定的,但它默认为<p>所以你div id="Main"无论如何都必须输入。