Unerwartetes Substitutionsverhalten

Sep 01 2020

Ich muss ein Komma zwischen zwei beliebigen Ziffern in einer Ziffernfolge setzen. Zum Beispiel möchte ich das

12345678910

dies zu werden

1,2,3,4,5,6,7,8,9,1,0

Der Ansatz, den ich gewählt habe, war der folgende

s/\([0-9]\)\([0-9]\)/\1,\2/g

Seltsamerweise gibt der obige Substitutionsbefehl, wenn er auf die Zeichenfolge im Beispiel angewendet wird, Folgendes an

1,23,45,67,89,10

Wenn ich den Substitutionsbefehl erneut anwende, gibt er das, was ich will. Aber warum funktioniert nur eine Instanz des Befehls nicht?

Die vimVersion, die ich benutze, ist

VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Mar 18 2020 18:29:15)

Antworten

7 Matt Sep 01 2020 at 12:34

Warum funktioniert nur eine Instanz des Befehls nicht?

Offensichtlich wird die Zeichenfolge als (12)(34)(56)(78)(91)0-> analysiert1,2 3,4 5,6 7,8 9,1 0

Eine mögliche Lösung ist s/\d\d\@=/\0,/g. Siehe :h /\@=.