【问题标题】:wrapping sections with HTML tags in vim在 vim 中用 HTML 标记包装部分
【发布时间】:2012-11-12 18:25:57
【问题描述】:

我希望能够用其他标签快速包装我的 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,但我不相信环绕.vim 用单词(即&lt;div&gt;)包围,只是单个字符(即&lt;),它也不缩进。

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

【问题讨论】:

  • surround.vim 确实支持这一点。它就在自述文件中,但 vim.org 似乎破坏了它。见这里:github.com/tpope/vim-surround/blob/master/README.markdown
  • @RandyMorris 我知道它围绕着 HTML 标签。但是 README 声明它也会缩进内部文本,如何实现?
  • 我相信使用S 而不是s
  • 是的,使用 S 来获得干净的缩进 HTML。

标签: html vim plugins


【解决方案1】:

surround.vim 可以用 html 标签包围,但它不缩进仅在视觉模式下使用 S 时才缩进,而不是 ys 和视觉中的 s,感谢@兰迪莫里斯。如果移动到ys 或使用的视觉选择是逐行的,它还会在下一行和上一行(不缩进)上放置相同缩进的 div。对于yss 甚至都不这样做,所以如果你真的想避免可视模式,你必须使用ysg@&lt;div&gt;j&gt;&gt;

更新:有g:surround_indentb:surround_indent 选项。如果您设置其中任何一个,则环绕.vim 将使用= 将被包围的文本与其周围的文本一起缩进,上面的ys 不缩进的混乱将是错误的,以及SS 将使用=以及)。需要filetype indent on 和正确的缩进设置。

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

【讨论】:

  • 我使用了环绕.vim,它正确地用标签和缩进环绕。我的 vimrc 中也有 'indent on' 和 'set autoindent'。
  • @GaryWilloughby 如果您提到如何合并缩进,我会接受这个答案,或者 Gary 可能会对此有所了解。
  • @puk 使用行选择模式 ('V') 选择行,然后点击大写字母 'S'。这允许您在命令行上输入标签,当标签关闭时,包围并缩进选定的行。
【解决方案2】:

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

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

V5jS<div id="Main"<CR>

做这个伎俩。

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

Vat<div id="Main"<CR>

&lt;div id="Main" 部分似乎很难跳过。

当然还有其他方法。

ZenCoding,例如,让您可以使用这样的 CSS 语法:

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

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

TextMate 的 ControlShiftw 很好,这是肯定的,但它默认为 &lt;p&gt;,所以你必须输入 @ 987654328@反正。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    相关资源
    最近更新 更多