Uczę się lubić vima, ale jedną z rzeczy, których jeszcze w pełni nie zaakceptowałem, jest sytuacja kopiowania i wklejania. W mugolskim edytorze tekstowym chciałbym Ctrl- Cskopiować kawałek tekstu, a następnie edytować / usunąć, a następnie wkleić tekst w innym miejscu. Jednak w vim nie mogę tego zrobić, bo po tym, jak skopiować tekst y, modyfikując tekst często wiąże di xktóry zaciera mój oryginalny tekst.
Czy jest jakiś sposób na wykonanie di xnie kopiowanie tekstu? W przeciwnym razie, jak powinienem korzystać z tych funkcji vima?
y
, kontynuować edycję, w tymd
ix
, i wklejać"0p
Polecenia, o których mówisz, używają tak zwanego rejestru „bez nazwy”. Jest przeznaczony tylko do bardzo krótkotrwałego użytkowania. „Wyrywam to stąd i umieszczam tam” coś w tym rodzaju.
Jeśli chcesz trzymać się czegoś dłużej niż kilka sekund, gdy idziesz i robisz coś innego, powinieneś używać rejestrów nazwanych.
Na przykład " a y yszarpnie linię, w której znajduje się kursor, do
a
rejestru. Nic nie zablokuje go przypadkowo, chyba że wpiszesz inne polecenie dotyczącea
rejestru. Minuty, godziny, a nawet dni później możesz wpisać, " a paby usunąć tę szarpaną kopię wiersza za
rejestru poniżej tego, na którym znajduje się kursor.(Aby to działało naprawdę dobrze, powinieneś mieć wiersz taki jak
set viminfo='50,\"1000
w swoim~/.vimrc
pliku, aby zapamiętać takie rzeczy, jak rejestracja zawartości podczas sesji Vima. Możesz wtedy pojechać na wakacje między szarpnięciem i włożeniem!)Istnieje 26 nazwanych rejestrów (az). Jeśli podasz je wielkimi literami zamiast jak pokazano powyżej, dołączasz do zawartości rejestru zamiast ich zastępować. Możesz więc zbudować coś naprawdę złożonego, powiedzmy, zarejestrować po
h
jednym kawałku na raz, a następnie odrzucić wszystko naraz " h p.Zauważ, że nazwa rejestru jest opcjonalna. Oznacza to, że może istnieć wiele poleceń, które już znasz i których możesz używać w nazwanych rejestrach. Powiedz
:help registers
w Vimie, aby dowiedzieć się o możliwościach.Również dostać kubek Vi .
źródło
Jeśli musisz usunąć tekst za pomocą d bez zmiany rejestru szarpnięć (powiedzmy, że już szarpałeś w nim tekst, którego nie jesteś gotowy wkleić przed usunięciem innego tekstu, na przykład), możesz użyć rejestru czarnej dziury
_
.Jeśli tak zrobisz "_dd, bieżący wiersz zostanie natychmiast usunięty i zapomniany.
W rzeczywistości nie używam tego rejestru bardzo często. Nie wymaga to mniejszej liczby naciśnięć klawiszy niż zapis do rejestru ogólnego przeznaczenia (dowolnego rejestru listowego), a jeśli zapisujesz do rejestru ogólnego przeznaczenia, przynajmniej linie, które usunąłeś, są nadal dostępne do momentu zastąpienia rejestru, jeśli pojawia się potrzeba.
Jeśli masz tendencję do zapomnij użyć innego rejestru podczas usuwania, można zdefiniować otoki makra dla ddna przykład tak:
:noremap dd "add
.źródło
Jak wskazano w komentarzach do (bieżącej) akceptowanej odpowiedzi, kanonicznym sposobem na to jest użycie rejestru zero (
"0
). Rejestr zero zawsze zawiera ostatni szarpnięcie i nie zostanie nadpisany przezd
ix
, więc"0p
zawsze umieszcza to, co szarpałeś, niezależnie od tego, co zostało w międzyczasie edytowane.źródło