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 \0zwykł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.