2015-02-07 33 views
1

我想清理一堆vim中的yaml文件。 yaml文件是用於測試的裝置,它們包含XML的文字字符串。它們看起來像:在Vim中使用`!`命令維持現有的縮進

- 
    - "<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中執行!命令時,有更好的方法來維持縮進嗎?

回答

2

你的問題沒有直接說明這一點,但它有點暗示vim是縮進被剝離的原因,所以爲了清楚起見,縮進被xmllint取出。

您可以嘗試首先保存縮進,但如果縮進在不同行之間不同,可能會造成混淆。在這種情況下,它可能更有意義的看着你正在運行後只需添加壓痕的命令 - 你可以將它添加到您的命令過濾器,例如自動做到這一點:

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