Ich habe eine kleine JSON-Dateien mit einigen Einträgen, hier ist ein Schnitt:Vim - Substitute Befehl und regexp
"i":{
"normale":"3c",
"bold":"4b",
"doppio":"6c"},
"is":{
"normale":"2c",
"bold":"33",
"doppio":"66"},
mir klar, ich muss hinzufügen, „\ u25“ vor allen Werten, so dass ich diesen Befehl versucht:
:%s:\("\)\(\d\d"\)\|\("\)\(\d\w"\):"\\u25\2
die Idee ist, für entweder „dd“ oder „dw“, und ersetzen Sie den ersten doppelten Anführungszeichen mit "\u25
zu suchen, während die rest.This zu halten, ist das Ergebnis:
"i":{
"normale":"\u25,
"bold":"\u25,
"doppio":"\u25},
"is":{
"normale":"\u25,
"bold":"\u2533",
"doppio":"\u2566"},
Wenn die übereinstimmende Zeichenkette nur die zwei Ziffern hat, funktioniert der Befehl gut: das erste doppelte Zitat (die erste Gruppe) wird ersetzt und die zweite Gruppe bleibt so wie sie war. Wenn die übereinstimmende Zeichenfolge jedoch eine Ziffer und ein Zeichen enthält, scheint sie die zweite Gruppe zu ignorieren, indem sie die gesamte Zeichenfolge ersetzt. Die beiden Muster sind bis auf \w
identisch, also sollte es genauso funktionieren. Was ist los?
Aha! Schön und sauber, das habe ich nicht bemerkt. Also, vielleicht funktioniert mein Befehl nicht, weil "dw" als hexadezimales Zeichen statt "einer Ziffer mit einem folgenden Zeichen" erkannt wird. –
Weil '\ d' Dezimalziffern entspricht und' \ x' Hexadezimalziffern entspricht? –