2017-10-16 5 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、またはstlimeでこれを行う方法があるに違いありませんが、私は方法を見つけるのに苦労しています。

数値を増やすことはvimで^ Xと動作するようですが、実際には番号の上にある番号を取って番号を付け直して1つ追加し、その番号で:に置き換えます。選択肢を得るための多分正規表現の問題とそれを動作させるためのマクロがありますが、うまくいかないでしょう。

+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

Doctorありがとうございました。私がやったことは、上記の行の番号をレジスタに入れ替えて、現在の番号をそれに置き換えてでインクリメントしてから、行を下ろすマクロを記録することです。あなたのソリューションほど効率的ではありません。 –

関連する問題