2017-10-16 69 views
1

我有一個yaml文件,其中有一長串編號字段。使用任何編輯器在yaml文件中重新編號列

1:first 
    . 
    .  
22: this 
23: that 
24: somethingelse 
22: this2 
23: that2 
24: somethingelse2 
etc 

我試圖去

1: first 
    . 
    . 
    . 
22: this 
23: that 
24: somethingelse 
25: this2 
26: that2 
27: somethingelse2 

我需要做的是重新編號開始在限定數量高達約400(每個文件多次)這些字段。

在vim,atom或sublime中必須有一種方法可以做到這一點,但我正在努力尋找一種方法。

遞增數字似乎在vim中與^ X一起工作,但是我真的需要把我重新編號的列上面的數字添加到它,並將文本替換爲:使用該數字。它可能是一個正則表達式的問題,以獲得選擇權和一個宏,使其工作,但我不能解決。

+1

請爲上面的示例提交所需的輸出,但不清楚你想要什麼。 –

+0

我發現:/ \ d \ {1,3}:/將在行的開頭選擇數字(包括:)。宏從那裏工作? –

+0

您可以使用專爲編號設計的工具 - 'nl'。刪除所有數字(你可以用可視塊模式做到這一點),然後選擇你想要重新編號的所有文件,然後輸入'!nl -ba -w2 -s「:」' – aragaer

回答

3

看看這裏的細節:How to replace finding words with the different in each occurrence in VI/VIM editor ?

像這樣的東西應該工作:

:let @a=1 | %s/^\s*\zs\d\{1,3}\ze:/\=(@a+setreg('a',@a+1))/g 

當然可以適應@a您的需求。如您所見,您的\d\{1,3}仍在使用中。但要確保只有正確的部分匹配,它會查找該行的開頭。此外,它不取代:但檢查它。這可以通過\zs\ze來實現。請參閱:h \ze獲取更多信息

+0

謝謝醫生,那有效。我所做的也是記錄一個宏,將上面一行中的數字寫入一個寄存器,用它替換當前的數字,然後用遞增,然後向下移動一行。儘管不如您的解決方案高效。 –

相關問題