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.
0Rejestr 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 0i" oba mają teraz szarpaną linię.
- Przejdź do linii, aby zastąpić.
dd: Zarejestruj się "teraz ma usuniętą linię, ale rejestr 0nadal 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ć "0pzamiast "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 AAAdo rejestru ai BBBdo rejestru b(lub pozostaw jeden z nich w rejestrze)0 ), a następnie wklej je odpowiednio ).
Można również wkleić ze 0w 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ę 0i "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.