Vim suchen und ersetzen, hinzufügen einer Konstante
Ich weiß, das ist eine lange gedreht, aber ich habe eine riesige text Datei, und ich muss hinzufügen, eine bestimmte Zahl zu anderen zahlen, die bestimmte Kriterien erfüllt.
ZB.
identifying text 1.1200
identifying text 1.1400
und ich möchte zu verwandeln, indem Sie sagen 1.15) zu
identifying text 2.2700
identifying text 2.2900
Normalerweise würde ich dies in Python, aber es ist auf einem Windows-Rechner, wo ich nicht installieren kann zu viele Dinge. Ich habe Vim obwohl 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine Vereinfachung und ein Update auf hobbs' Lösung:
Dank
\zs
gibt es keine Notwendigkeit zu erinnern, der führende text. Dankstr2float()
eine einzige Zusatz ist getan auf die ganze Zahl (in anderen Worten, 1.15 + 2.87 geben das erwartete Ergebnis, 4.02, und nicht 3.102).Natürlich erfordert diese Lösung eine aktuelle Vim-version (7.3?)
printf()
werden kann ? (:h printf()) ->...\=printf('%.4f', 1.15+str2float(......))
\=
erlaubt den Ersatz-string, der Ausdruck. (link)str2nr
. Weitere Funktionen, siehe:h functions
Können Sie eine Aufnahme regex und dann mit einem vimscript Ausdruck als Ersatz, so etwas wie
(nur ohne Zeilenumbruch).
Ihre Nummer format zu sein scheint, eine Feste, so dass es leicht zu konvertieren in int und zurück zu kommen (entfernen Sie die dot) hinzufügen 11500 und setzen Sie den Punkt zurück.
Wenn Sie nicht wollen, zu tun, die auf alle Zeilen, aber nur das eine, die übereinstimmung 'identifizieren' text ersetzen alle % durch " g/Identifizierung text/'
Für Ganzzahlen können Sie einfach n^A hinzufügen n eine Zahl (und n^X zu subtrahieren). Ich bezweifle, ob das funktioniert, für gebrochene zahlen obwohl.
Gut, das ist vielleicht nicht eine Lösung für vim, aber ich denke, awk helfen können:
und der test
Brauchte ich die LC_ALL=C für die korrekte Konvertierung von floating-point-separator, und vielleicht gibt es eine elegantere Lösung für den Druck von Anfang/rest des Strings. Und das Ergebnis sieht wie folgt aus:
Verwenden der makro -
wenn du 300 Zeilen mit diesem Muster nur machen jetzt