Często w plikach konfiguracyjnych mogę skopiować i wkleić blok linii, a następnie chcę wprowadzić niewielkie zmiany w tym bloku. Po wklejeniu używam x
do usuwania znaków, które chcę usunąć, a następnie przechodzę do wklejania następnego bloku. Tyle że x
umieszcza usunięte znaki w schowku, więc muszę ponownie skopiować blok wierszy.
Czy można to zrobić bez przechodzenia w tryb wstawiania?
cut-copy-paste
register
durron597
źródło
źródło
Odpowiedzi:
Twoje opcje to:
_
. Na przykład, aby usunąć wiersz, który wpisujesz"_dd
. Spowoduje to usunięcie bez wpływu na schowek."ayy
a następnie wkleić"ap
"0p
Uruchom
:help registers
więcej szczegółów na temat pierwszych 3źródło
x
czego używałbym"_x
?x
, prawdopodobnie powinieneś nauczyć się ruchów usuwania, takich jakdt)
które usuwa, aż do następnego ścisłego nawiasu,d2W
który usuwa następne dwa tokeny oddzielone spacjami. Wtedy możesz zrobić coś takiego jak"_di{
w zbrojonym regionie, co robię cały czas. W normalnym trybie to znaczy „ kasowania wszystko wewnątrz tej usztywnione regionu do czarnej dziury ”nnoremap x "_x
do mojego~/.vimrc
(wyjaśnienie tutaj: stackoverflow.com/questions/54255/… ).x
nie umieszcza rzeczy w schowku, umieszcza je w rejestrze . Jeśli nie powiesz, do którego rejestru należy go umieścić, umieszcza go w rejestrze bez nazwy, co oczywiście zastępuje poprzednią zawartość. Zamiast tego powiedz, którego rejestru użyć" REGISTER x
:, gdzie REJESTR jest dowolną pojedynczą literą. Następnie użyj tego samego prefiksu rejestru cytatów, paby wkleić z tego rejestru. (Uwaga: małe litery zastępują ich treść; wielkie litery dołączają).Istnieją również dwa specjalne rejestry
"0
i"1
."0
jest ostatnim szarpanym ( y) tekstem, który pozostanie, nawet jeśli usuniesz jakiś tekst innym poleceniem (jak x)."1
jest ostatnio usuniętym tekstem, o ile ten tekst nie jest mały (jedna linia). Wchodzi mały usunięty tekst"-
.Wreszcie, jak zauważa Steve Vermeulen, możesz powiedzieć vimowi, aby nie zapisywał usuniętego tekstu, podając rejestr czarnej dziury
"_
.Odpowiednie polecenie pomocy to
:help registers
.źródło
:let
Komenda pozwoli Ci na nowo zdefiniować nazwany rejestr. W wierszu poleceń vima naciśnięcie Control+ R dwa razy 1, a następnie nazwa rejestru wklei zawartość rejestru do polecenia. Następnie możesz zmodyfikować to, co jest wklejone i zapisać rejestr ze swoimi modyfikacjami.Przykład:
"fyy
szarpa całą linię (yy
) dof
rejestru ("f
).:let @f='
i Control+ r, Control+ , a powinieneś zobaczyć, jak wkleja się w „Foo Bar”, więc linia poleceń teraz czyta , z kursorem na samym końcu.rf:let @f='Foo Bar
:let @f='foo bar baz
.:let @f='foo bar baz'
i naciśnij Enter.Teraz zmieniłeś treść
f
rejestru na „foo bar baz”.(Działa to również w przypadku makr!
:help let
Więcej informacji.)1 Control + rpozwala wstawić rejestr, gdy jesteś już w trybie wstawiania, tak jakbyś pisał znaki. Dwukrotne użycie tej sekwencji jest ważne, ponieważ „tekst jest wstawiany dosłownie, a nie jak napisany. Różni się, gdy rejestr zawiera znaki takie jak
<BS>
”. - insert.txt vimdoc,:help i_CTRL-R_CTRL-R
źródło
W związku z rejestrem blackhole
"_
wspomnianym przez @derobert przydatny screencast można znaleźć na stronie http://vimcasts.org/episodes/meet-the-yank-register/źródło
Plugin ReplaceWithRegister
http://www.vim.org/scripts/script.php?script_id=2703 (2009-2014)
Sugeruje mapowanie
gr
.gr
Alternatywnie użyj tego,
gr<text object>
aby to zrobić bez wizualnego wyboru. Funkcja powtarzania kropek jest obsługiwana, gdy są zainstalowane wtyczki Tim'arepeat.vim
Pope'a ivisualrepeat.vim
Ingo Karkata.źródło