【问题标题】:Maintain existing indentation with `!` command in Vim在 Vim 中使用 `!` 命令维护现有缩进
【发布时间】:2015-02-07 02:18:57
【问题描述】:

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

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

我希望它们看起来像:

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

我去掉引号,将光标放在未格式化的 xml 的开头并点击&gt;,输入,&lt;tab&gt;,我得到

-
  - >
    <xml>…

但后来我尝试以我知道的唯一方式格式化 xml:shift-v 选择行。 :'&lt;,'&gt;!xmllint --nocdata --format - | awk 'NR&gt;1' 格式化xml,我得到了

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

然后我必须重新选择xml并使用2&gt;&gt;重新缩进。

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

【问题讨论】:

    标签: vim editor indentation


    【解决方案1】:

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

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

    :'&lt;,'&gt;!xmllint --nocdata --format - | awk 'NR&gt;1' | sed -e 's/^/\t/'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-05
      • 2012-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-02
      • 2012-07-15
      • 2013-09-26
      相关资源
      最近更新 更多