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.Wygląda na to, że Kevin ma całkiem dobrą odpowiedź, ale jeśli chcesz spojrzeć na każdą usuwaną linię, a następnie ją zastąpić, istnieje nieco inne rozwiązanie.
Ten rodzaj przepisu pozwala na użycie dopasowania wzorca do znalezienia linii do usunięcia i zastąpienia, a także możesz wrócić do początku pliku (1G) i wyszukiwać do przodu tak często, jak chcesz. Jeśli mam 2 lub więcej linii do zebrania i umieszczenia wielokrotnie, używam
"ayy
dla pierwszej linii,"byy
dla drugiej,"cyy
dla trzeciej i tak dalej. Przyzwyczaiłem się (co zmniejsza ogólność przepisu), aby zmniejszyć obciążenie psychiczne.źródło
"ayy
, a następniedd
,dd
nie zastąpi tego, co jesta
, ale jeśli wpisujęp
to wklej to, co było po prostu usunąć za pomocądd
. A jeśli chciałbym zastąpić to, co jest,"ayy
tym, co usuwam, to użyłbym"add
- czy to prawda?Można to zrobić na kilka sposobów
:s
, w zależności od tego, ile chcesz pisać. Najprostszym sposobem jest proste wyszukiwanie i zamiana:%
Przeszuka cały plik i zastąpić wszystkie wystąpienia.Jeśli to dla Ciebie za dużo pisania, możesz pociągnąć za docelowy ciąg (
yy
) i użyć"
(domyślnego) rejestru, wstawiając go za pomocą Ctrl+r ":Lub, jeśli masz kopię ciągu zastępującego, możesz przeciągnąć je do osobnych rejestrów za pomocą
"ayy
i, i"byy
pociągnąć odpowiednio do rejestrówa
ib
(możesz użyć dowolnej litery dla swoich rejestrów). Następnie użyj Ctrl+r ai, Ctrl+r baby wkleić je do pola wyszukiwania i zamień.Nie do pojedynczego Bruce'a, ale jeśli chcesz sprawdzić linie przed ich zastąpieniem, po prostu dodaj
c
opcję:źródło
Możesz użyć,
V
aby podświetlić linię, którą chcesz zastąpić w trybie wizualnym, a następnie naciśnij,pp
aby wkleić tę linię.Dodaje to tylko jedno naciśnięcie klawisza, więc wydaje się, że to całkiem dobre rozwiązanie.
źródło
V
p
.Używam polecenia
c
„zmień” dość często do tego rodzaju rzeczy, w połączeniu z regularnym wyszukiwaniem. Możesz przeszukać plik pod kątem każdego interesującego cię wiersza / tekstu, a następnie użyć kolejnychn.
poleceń (n
dla następnego, a następnie,.
aby powtórzyć ostatnią zmianę)./^hello
- znajdź linię zaczynającą się od hello;c$goodbye
- zmień linię na do widzenia;n.
- powtórz wyszukiwanie, powtórz zmianęJeśli chcesz zmienić wiersz na jeden już w pliku, możesz po prostu skopiować go do bufora wejściowego (zakładając, że GUI na to pozwala), a następnie wkleić, aby uzyskać treść pierwszego polecenia zmiany.
Jak w przypadku wszystkich rzeczy vi, dobrze jest mieć wiele opcji w kieszeni, w zależności od tego, jaką edycję chcesz wykonać.
źródło