Berechnen Sie mit dem Ausdrucksregister
Sie können Berechnungen sowohl im normalen Modus als auch im Einfügemodus durchführen.
Normaler Modus
Wenn Sie im normalen Modus @=
den Cursor eingeben, gelangen Sie in die Befehlszeile, in der Sie einen beliebigen Ausdruck eingeben können. Wenn Sie die Eingabetaste drücken, wird das Ergebnis des Ausdrucks als Normalmodusbefehl ausgeführt.
Angenommen, Sie möchten in die mittlere Spalte der aktuellen Zeile wechseln. Der Funktionsaufruf col('$')
gibt die Anzahl der Spalten in der Zeile zurück. Um dies zu erreichen, geben Sie Folgendes ein:
@=col('$')/2<CR>|
Wenn Sie die Eingabetaste drücken, kehrt der Cursor zum Puffer zurück und vim wartet auf einen Operator (wie |
), als hätten Sie gerade eine Nummer eingegeben. Alternativ hätten Sie Folgendes eingeben können:
@=col('$')/2.'|'
... aber das sind natürlich mehr Bytes.
Einfügemodus
Sie können das Ausdrucksregister auch im Einfügemodus verwenden, indem Sie <Ctrl-r>=
anstelle von drücken @=
. Dies funktioniert im normalen Modus genauso, mit der Ausnahme, dass das Ergebnis des von Ihnen eingegebenen Ausdrucks im Einfügemodus ausgeführt wird. Wenn Sie beispielsweise tippen <Ctrl-r>=col('$')<CR>
, wird die Anzahl der Spalten in der aktuellen Zeile so am Cursor eingefügt, als hätten Sie sie eingegeben.
Geben Sie ein, um weitere Informationen zum Ausdrucksregister zu erhalten :help "=
.
Ausdrücke wiederverwenden
Der zuletzt verwendete Ausdruck wird im Ausdrucksregister gespeichert "=
. Wenn Sie @=<CR>
im normalen Modus oder <Ctrl-r>=<CR>
im Einfügemodus tippen, wird der Ausdruck erneut ausgewertet, sodass Sie sie ähnlich wie Makros verwenden können.
Berechnen Sie in Substitutionen
Sie können Ausdrücke auch dann auswerten, wenn Sie reguläre Ausdrücke ersetzen. Alles was Sie tun müssen, ist Ihre Substitution mit zu beginnen \=
. Angenommen, Sie möchten die Zeilen in dieser Datei nummerieren:
foo
bar
baz
Der Funktionsaufruf line('.')
gibt die aktuelle Zeilennummer zurück, sodass die Arbeit einfach ist. Eingabe:
:s/^/\=line('.').' '/g<CR>
... ergibt das gewünschte Ergebnis:
1 foo
2 bar
3 baz
Um erfassten Gruppen in einem solchen Ausdruck verwenden Sie die verwenden können , submatch()
Funktion, wo zB submatch(0)
äquivalent ist \0
in einer gewöhnlichen Substitution, submatch(1)
entspricht \1
usw. Diese eats up viele Tastenanschläge, leider.
Geben Sie ein, um weitere Informationen zur Ersetzung von Ausdrücken zu erhalten :help sub-replace-expression
.