Mam trochę tekstu w buforze wklejania, np. Zrobiłem yw
(szarpnięcie słowa), a teraz mam „foo” w buforze.
Teraz przechodzę do słowa „pasek” i chcę go zastąpić buforem do wklejania.
Aby ręcznie zastąpić tekst, mógłbym to zrobić, cw
a następnie wpisać nowe słowo.
Jak zrobić „zmienić słowo”, ale korzystać z zawartości bufora wklejania zamiast ręcznie wpisywać słowo zastępujące?
Najlepszą opcją, jaką mam teraz, jest przejście do początku słowa, które chcę zastąpić i zrobienie dw
(usunięcie słowa), następnie przejście do drugiego miejsca i zrobienie yw
(słowo szarpnięcia), a następnie powrót do obszaru wymiany i zrobienie p
(wklej), co jest dość niezdarne, szczególnie jeśli nie ma ich na tym samym ekranie.
vep
.ve"0p
będzie działać, aby umożliwić Ci powtórzenie zmianymap <C-j> ciw<C-r>0<ESC>
aby nie miało znaczenia, z którego miejsca słowa wciśniesz^j
.:help insert
przeszukaj CTRL-R/CTRL-R
. Jak tove"0p
działa, spójrz na:help registers
yw
aby szarpać słowo, a następnie przesuń kursor do słowa, które chcesz zastąpić, i użyj"_dw
go, aby je usunąć, wysyłając tekst do rejestru zerowego (aby nie zastępował zawartości"
rejestru, w którym domyślnie szarpany / wycięty tekst jest domyślnie ), a następnie po prostu wklej za pomocąp
.Możesz użyć następującego mapowania, aby trochę ułatwić:
... więc w trybie normalnym możesz użyć
\dw
do usunięcia słowa bez wpływu na"
rejestr.źródło
Aby to zrobić w sposób VIM, celowo używasz rejestrów yank, kasowania i innych.
Rejestr
"0
jest rejestrem szarpanym. Wszystko, co będziesz szarpać, zostanie tu umieszczone, ale nigdy nie dotykaj rejestru"0
.W twoim przykładzie właśnie szarpnąłeś słowo. Aby zamienić słowo na to, co właśnie szarpnąłeś, skorzystaj z usunięć, które nigdy nie dotykają rejestru szarpnięć. Więc przenieść się do słowa docelowej, usuń ją
dw
, a następnie wklej ze swoją Yank zarejestrować się"0p
, lub jeszcze lepiej,cw
a następnie^R0
(który jest powtarzalny).Przeciwnie do rejestru szarpnięć jest rejestr drobnych skasowań
"-
. Każde małe usunięcie lub zmiana jest tutaj umieszczone, ale szarpnięcia nigdy nie dotykają"-
. Usunięcie liczy się jako małe, jeśli jest mniejsze niż pełna linia.Rejestry
"1
-"9
to rejestry usuwania historii. Z"1
zawierający ostatnią dużą usunięcia lub zmiany usunięcie, a"9
zawierający najstarszą dużą usunięcia lub zmiany usunięcie. Usuwane są tylko te, które nie są małe, tj. Usuwanie jednej lub więcej linii, na"1
-"9
.Dla każdej operacji, która zmienia rejestr, kopia jest również zawsze umieszczana w domyślnym, nienazwanym rejestrze
""
. Jest to rejestr używany, gdy nie podajesz nazwy rejestru.Rejestr
"_
jest rejestrem czarnej dziury i zawsze jest pusty. Jeśli go usuniesz, nic w żadnym rejestrze się nie zmieni, nawet""
rejestr domyślny lub sam rejestr czarnej dziury. Usunięty tekst zniknął całkowicie poza historią cofania. Szarpanie się lub wklejanie z rejestru czarnej dziury w zasadzie nic nie robi.Rejestr czarnej dziury
"_
pozwala na takie rzeczy, jak najpierw jedno małe usunięcie, a następnie szereg innych usunięć"_
bez zmiany rejestru małych usunięć"-
, a następnie wklejenie pierwszego małego usunięcia.Inne rejestry to ostatnio wstawiony rejestr
".
, rejestry nazw plików"%
oraz"#
rejestr poleceń, rejestr":
wyszukiwania"/
i rejestr wyrażeń"=
.Możesz uzyskać listę wszystkich tych rejestrów i ich zawartości za pomocą polecenia
:register
. To polecenie jest bardzo przydatne do eksperymentowania i dowiadywania się, gdzie się kończy.źródło
Potrzebuję tego tak często, napisałem wtyczkę, aby uprościć i zezwolić na maksymalną prędkość: ReplaceWithRegister .
Ta wtyczka oferuje polecenie dwa w jednym,
gr
które zastępuje tekst objęty obiektem {motion} / text, całą linię (linie) lub bieżące zaznaczenie zawartością rejestru; stary tekst jest usuwany do rejestru czarnej dziury, tzn. zniknął. Przejrzysto obsługuje wiele skrzynek narożnych i pozwala na szybkie powtórzenie za pomocą standardowego.
polecenia. Jeśli ci się to nie podoba, jego strona zawiera linki do alternatyw.źródło
Aby powtórzyć wklej, użyj polecenia zmiany.
cw ^R0ESC (^ R = Control + R; 0 dla rejestru 0)
zastąpi słowo zawartością z reg. 0 i powtórzmy to.
Jest to świetne dla cgn(VIM 7.4), aby zastąpić wzorce wyszukiwania:
źródło
Ponieważ nie jest jeszcze uwzględniony, zwykle zamieniasz ciągi na
:%s/.../.../
i możesz to zrobić również ze słowem pod kursorem.:s/find/
<ctrl-r>
i wybierz kursorem słowo, które chcesz zastąpić.<ctrl-w>
(małe „słowo”) lub<ctrl-a>
(duże ”słowo), aby wkleić słowo pod kursorem do wiersza poleceniaZobacz link o korzystaniu z kursora w wierszu poleceń .
źródło
Zwykle używam tego: ywszarpać
foo
, a następnie usuwać zabar
pomocą dw, a jako ostatni krok wstawiaćfoo
z rejestru,0
który przechowuje szarpany tekst za pomocą "0p. W .razie potrzeby powtórz wprowadzanie za pomocą kropki ( ).Ponadto zamiast ywi dwmożesz używać yiwi diw(zauważ dodatkowe i- oznacza to wewnątrz ). Dzięki temu możesz szarpać lub usuwać słowa z dowolnego miejsca w nim, nie tylko na początku słowa.
źródło
Używam tej wtyczki do rozwijania regionu wyboru: https://github.com/terryma/vim-expand-region
Tak więc moja kombinacja zmiany słowa będzie:
vvp
w dowolnym miejscu słowa.Mam też hack do zapisywania nienazwanej zawartości rejestru po wklejeniu, więc mogę to powtórzyć.
(mój schowek jest automatycznie wybierany)
źródło
Korzystam z mapowania klawiszy poniżej, aby zastąpić bieżące słowo skopiowanym słowem.
" replace with Register 0
map <leader>rr ciw<C-r>0<Esc>
yiwskopiuj słowo. Przejdź do słowa. ,rrzamień słowo.
Kluczem lidera jest mapa do ,.
źródło
,rw
miałoby to większy sens, a na QWERTY jest prawdopodobnie łatwiejsze i szybsze do rozebrania. W DVORAK wybrałem,rc
, co choć nie ma większego sensu, jest łatwiejsze i szybsze niż wszystkie. Na DVORAK,rw
znajduje się horror;)Najpierw przejdź do początku słowa, które chcesz zaciągnąć. Jeśli jesteś w środku słowa, po prostu zrób to,
b
aby wrócić do jego początku. Następnie zróbye
szarpnięcie całym słowem, bez spacji końcowych (ody
ank doe
nd). Na koniec przejdź do słowa, które chcesz zastąpić - być może wykonującw
kilka razy - i zrób przejścievep
dov
trybu zaznaczania rzeczywistego, wybierz nae
drugą stronę słowa ip
sprawdź ostatnią szarpniętą zawartość.(Jeśli ktoś chce wiedzieć, dlaczego nie skomentowałem zaakceptowanej odpowiedzi, z powodu małej modyfikacji używania
ye
zamiastyw
, to dlatego, że moja reputacja na tym stosie jest wciąż zbyt niska).źródło
yw
aby szarpać świat, idź do świata, który chcesz zmienić.v
wybierz światve
lub wvw
zależności od sytuacji.p
aby wkleić skopiowany świat, aby zastąpić wybrany blokźródło
Dodanie do innych lepszych odpowiedzi. Trochę zbyt oczywiste, ale możesz po prostu wkleić przed usunięciem. „yw”, a następnie wpisz słowo, które chcesz zastąpić, „pldw” (wklej, przesuń jeden znak w prawo, usuń słowo.
źródło