Domyślnie polecenia wklejania używają "
rejestru („bez nazwy”) . W efekcie każde polecenie, które zapisuje do rejestru, również zapisuje do rejestru nienazwanego, więc wyszarpuje, usuwa i zmienia wszystko. Właśnie dlatego twoja sekwencja usuwania i wklejania wkleja usunięty tekst zamiast zrywanego tekstu.
0
Rejestr może pomóc tutaj. Wszelkie polecenia szarpnięcia, które nie określają rejestru, umieszczają szarpany tekst w rejestrze 0
(oprócz "
). Operacje usuwania lub zmiany nie mają na nią wpływu, więc możesz użyć go do wielokrotnego wklejenia szarpanej linii, nawet jeśli wykonujesz pośrednie usuwanie lub zmiany.
yy
: Rejestry 0
i"
oba mają teraz szarpaną linię.
- Przejdź do linii, aby zastąpić.
dd
: Zarejestruj się "
teraz ma usuniętą linię, ale rejestr 0
nadal ma szarpaną linię.
"0P
: Wklej oryginalnie szarpaną linię z rejestru 0
.
- Przejdź do następnego wiersza, aby go zastąpić.
dd"0P
(tak samo jak powyżej)
(Ze względu na sposób, w jaki działa pozycjonowanie kursora podczas zastępowania ostatniego wiersza bufora, będziesz chciał użyć "0p
zamiast "0P
.)
Jest to bardzo zbliżone do odpowiedzi Bruce'a Edigera , z tym wyjątkiem, że nie musisz określać rejestru, gdy początkowo szarpałeś. Używanie jednego lub więcej nazwanych rejestrów może być bardzo przydatne, jeśli musisz (na przykład) zamienić niektóre wiersze na AAA
, ale inne wiersze na BBB
(wpisz AAA
do rejestru a
i BBB
do rejestru b
(lub pozostaw jeden z nich w rejestrze)0
), a następnie wklej je odpowiednio ).
Można również wkleić ze 0
w trybie wizualnym linia mądry ( V
), aby zapisać klawiszy: V"0p
.
Jeśli nie lubisz pisać "0
, wygodniejsze może być mapowanie:
noremap <Leader>p "0p
noremap <Leader>P "0P
vnoremap <Leader>p "0p
Alternatywnym podejściem jest usunięcie z _
rejestru („czarnej dziury”) . Po usunięciu do "
rejestru nie ma to wpływu na rejestr, więc sekwencja yank-delete-paste może nadal wklejać tekst z rejestru bez nazwy.
yy
: Zarejestruj się 0
i "
oba mają teraz szarpaną linię.
"_dd
: Brak zmian w rejestrach.
P
: Wklej pierwotnie wyrwany tekst z rejestru "
.
Ponownie, mapowanie może być wygodniejsze:
noremap <Leader>d "_d
yy
(przejdź do linii do zastąpienia)S<C-r>0<Esc>
. Ma tę zaletę, że jest powtarzalna z.
poleceniem.