Wie füge ich eine Zeichenfolge hinzu \ d

442
dalihao

Ich möchte die gesamte Datei einer Datei ersetzen. string\d\+ Zum Beispiel string10 bis string 20.Ich versuchte es mit s/\(string\)\d\+/\1\=submatch(0)+10 Ich weiß, ob der \=Richter vorhanden \1ist oder nicht. Aber help: submatchwie folgt. Wie kann ich diesen Befehl korrigieren? Oder es gibt eine andere Methode, um dies zu erreichen.

1

1 Antwort auf die Frage

0
Ingo Karkat
:s/\(string\)\d\+/\1\=submatch(0)+10 

Du bist in der Nähe:

  • Sie können keinen normalen Ersatz ( \1) und mischen :help sub-replace-expression. Wenn Sie letzteres verwenden, muss der gesamte Ersatz ein Ausdruck sein.
  • Um die Anzahl zu erhöhen, muss sie separat erfasst werden. submatch(0)ist das ganze Spiel; Sie können es nicht einfach hinzufügen 10.
  • Wenn Sie alle Vorkommen ersetzen möchten, müssen Sie noch das /gFlag und ein hinzufügen :[range]. Andernfalls wird nur die erste Übereinstimmung der aktuellen Zeile erhöht.

Hier ist eine Variante mit vollständiger Erfassung:

:%substitute/\(string\)\(\d\+\)/\=submatch(1) . (submatch(2) + 10)/g 

Da Sie nichts mit dem stringPräfix tun, können wir alternativ darauf hinweisen (aber nicht einschließen) via :help /\zs; Wir brauchen dann keine Capture:

:%substitute/string\zs\d\+/\=submatch(0) + 10/g