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

时间:2014-03-25 14:49:43

标签: vim formatting

我不确定这是否可行,但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个嵌套标签,通常从缩进开始那里。

3 个答案:

答案 0 :(得分:3)

你知道vim的录音功能吗?尝试做以下事情:

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

答案 1 :(得分:3)

使用宏为您的示例输入执行此操作的方法,使用以下命令添加宏并使用@i在一行上运行,或使用{motion}@i在多行上运行,即运行它3行按3@i,它将缩进所有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. +:移至下一行的第一个非空白字符

答案 2 :(得分:0)

作为替代方案,通过haml

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

通过gem install hamlgem install html2haml

安装宝石

有关过滤器的更多帮助,请参阅:h :range!