在Vim中用`!`命令维护现有的缩进

时间:2015-02-07 02:18:57

标签: vim editor indentation

我正在尝试在vim中清理一堆yaml文件。 yaml文件是测试的固定装置,它们包含XML的文字字符串。他们看起来像:

-
  - "<xml>blah blah blah …1000 characters later</xml>"
  - "<more>…</more>"

我希望它们看起来像:

-
  - >
    <xml>
      <nicely>formatted</nicely>
      …
    </xml>
  - >
    <more>
      …
    </more>

我删除引号,将光标放在未格式化的xml的开头,然后点击>,输入<tab>,我得

-
  - >
    <xml>…

但是我尝试格式化xml是我知道的唯一方法:shift - v来选择该行。 :'<,'>!xmllint --nocdata --format - | awk 'NR>1'格式化xml,我得到了

-
  - >
<xml>
  <nicely>formatted</nicely>
  …
</xml>

然后我必须重新选择xml并使用2>>重新启动。

在Vim中执行!命令时,是否有更好的方法来维护缩进?

1 个答案:

答案 0 :(得分:2)

你的问题并没有直截了当地说明,但它有点暗示vim是剥离缩进的原因,所以要清楚,缩进是由xmllint取出的。

您可以先尝试保存缩进,但如果不同行之间的缩进不同,则可能会造成混淆。在这种情况下,从查看正在运行的命令到稍后添加缩进可能更有意义 - 您可以通过将其添加到命令过滤器来自动执行此操作,例如:

:'<,'>!xmllint --nocdata --format - | awk 'NR>1' | sed -e 's/^/\t/'