VIM:将格式复制到视觉选择?

问题描述 投票:0回答:4

我不确定这是否可行,但 Vim 不断给我带来惊喜。我希望能够做的是采用一个文本块的格式并将其应用于选择。假设有几行是这样的:

<li><a href="#"><span>Something Here</span><i class="icon"></i></a></li>
<li><a href="#"><span>Something Here</span><i class="icon"></i></a></li>
<li><a href="#"><span>Something Here</span><i class="icon"></i></a></li>

我想格式化其中一行:

<li>
    <a href="#">
        <span>Something Here</span>
        <i class="icon"></i>
    </a>
</li>

然后将该格式应用于其余行。再说一遍,不知道这是否可行,但如果可以的话那就非常简洁了 - 我经常必须实现 HTML 模板,其中有很长的行,其中可能有 5 或 6 个嵌套标签,通常以非常明显的缩进开始在那里。

vim formatting
4个回答
3
投票

你知道vim的录音功能吗?尝试执行以下操作:

  1. q
    +
    some character
    进入录音模式
  2. 对行进行格式化
  3. q
    退出录音模式
  4. 转到下一行
  5. @
    +
    some character
    重现记录的操作

3
投票

使用示例输入的宏来执行此操作的方法是,使用以下命令添加宏,并使用

@i
在一行上运行它,或使用
{motion}@i
在多行上运行它,即按
3@i
在 3 行上运行它它会缩进所有 3 行。

:let @i='0f<i^M^[>>;i^M^[>>;;i^M^[;;;i^M^[<<;i^M^[<<+'

说明:

  1. 0
    :移至行首
  2. f<
    :先找到
    <
  3. i^M^[
    : 进入插入模式,插入换行符并返回命令模式。
  4. >>
    :缩进行
  5. ;
    :查找下一个
    <
  6. i^M^[
    :重复步骤3
  7. <<
    :取消行缩进
  8. +
    : 移动到下一行的第一个非空白字符

0
投票

作为替代方案,通过

haml
 使用 
html2haml
:!

命令过滤内容
:%!html2haml -s | haml -q -s

通过

gem install haml
gem install html2haml

安装 gem

有关过滤器的更多帮助,请参阅

:h :range!


0
投票

如果输入与第一篇文章中显示的一样规则,您可以使用像这样的正则表达式:

:%s/\(<a.\{-}>\)\(<span.\{-}\/span>\)\(<i.\{-}\/i>\)\(<\/a>\)/\r    \1\r
  \2\r        \3\r    \4\r/g

解释是,您将每组代码分开

\(..\)
,然后在替换部分,在每个代码之前添加一些空格。

© www.soinside.com 2019 - 2024. All rights reserved.