使用“!”维护现有缩进Vim中的命令



我正在尝试清理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并使用CCD_ 6来重新登录。

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

您的问题并没有直接说明这一点,但它在某种程度上暗示了vim是剥离缩进的原因,所以为了清楚起见,缩进是由xmllint删除的。

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

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

最新更新