Wykonuj obliczenia za pomocą rejestru wyrażeń
Możesz wykonywać obliczenia zarówno w trybie normalnym, jak i w trybie wstawiania.
Tryb normalny
W trybie normalnym, jeśli wpiszesz @=
kursor przejdzie do wiersza polecenia, w którym można wprowadzić dowolne wyrażenie. Po naciśnięciu klawisza Enter wynik wyrażenia zostanie wykonany jako polecenie w trybie normalnym.
Załóżmy na przykład, że chcesz przejść do środkowej kolumny bieżącego wiersza. Wywołanie funkcji col('$')
zwraca liczbę kolumn w wierszu, dzięki czemu możemy to osiągnąć, wpisując następujące polecenie:
@=col('$')/2<CR>|
Kiedy naciśniesz enter, kursor powróci do bufora i vim czeka na operatora (jak |
) tak, jakbyś właśnie wprowadził liczbę. Ewentualnie możesz wprowadzić to:
@=col('$')/2.'|'
... ale to oczywiście więcej bajtów.
Tryb wstawiania
Rejestru wyrażeń można także użyć w trybie wstawiania, naciskając <Ctrl-r>=
zamiast @=
. Działa tak samo w trybie normalnym, z wyjątkiem tego, że wpisane wyrażenie zostanie wykonane w trybie wstawiania. Na przykład jeśli wpiszesz<Ctrl-r>=col('$')<CR>
, liczba kolumn w bieżącym wierszu zostanie wstawiona pod kursorem, tak jakbyś go wpisał.
Aby uzyskać więcej informacji na temat rejestru wyrażeń, wpisz :help "=
.
Ponowne użycie wyrażeń
Ostatnim wyrażenie użyte jest przechowywana w rejestrze ekspresyjnego "=
. Wpisanie @=<CR>
w trybie normalnym lub <Ctrl-r>=<CR>
w trybie wstawiania ponownie oceni wyrażenie, umożliwiając korzystanie z nich podobnie do makr.
Wykonuj obliczenia w zamianach
Możesz również oceniać wyrażenia, wykonując zamiany wyrażeń regularnych. Wszystko, co musisz zrobić, to rozpocząć zamianę \=
. Załóżmy na przykład, że chcesz numerować linie w tym pliku:
foo
bar
baz
Wywołanie funkcji line('.')
zwraca bieżący numer linii, więc zadanie jest łatwe. Wprowadzanie tego:
:s/^/\=line('.').' '/g<CR>
... daje pożądany wynik:
1 foo
2 bar
3 baz
Aby użyć przechwyconych grup w takim wyrażeniu, możesz użyć submatch()
funkcji, gdzie np. submatch(0)
Jest równoważne \0
zwykłemu podstawieniu, submatch(1)
jest równoważne \1
, itp. Niestety, to zużywa wiele naciśnięć klawiszy.
Aby uzyskać więcej informacji na temat podstawiania wyrażeń, wpisz :help sub-replace-expression
.