vim: Czy mogę wykonać * tylko * kopię?


11

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?

Odpowiedzi:


16

9 poprzednich szarpnięć jest zapisywanych w rejestrach wywoływanych 1przez 9. Możesz przywołać ostatni szarpnięcie za pomocą "1p, poprzedni za pomocą "2pi tak dalej. Polecenie :regpokazuje rejestry, które są dostępne do wklejenia.

Jeśli chcesz, aby szarpanie trwało dłużej, użyj rejestru listowego .

Dla bardziej niejasnych poleceń związanych z szarpnięciem, zacznij czytać :help "w instrukcji.


2
Ponadto rejestr 0 zawiera ostatni szarpnięty tekst (w przeciwieństwie do usuniętego). Wracając do pierwotnego pytania, możesz szarpać y, kontynuować edycję, w tym di x, i wklejać "0p
zszarpany

@Nefrubyr, powyższy komentarz jest w rzeczywistości najprostszą odpowiedzią, ale nie został wymieniony w żadnej z trzech istniejących odpowiedzi. Może powinieneś to dodać? (Mogę, jeśli nie masz).
Wildcard

9

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 arejestru. Nic nie zablokuje go przypadkowo, chyba że wpiszesz inne polecenie dotyczące arejestru. Minuty, godziny, a nawet dni później możesz wpisać, " a paby usunąć tę szarpaną kopię wiersza z arejestru poniżej tego, na którym znajduje się kursor.

(Aby to działało naprawdę dobrze, powinieneś mieć wiersz taki jak set viminfo='50,\"1000w swoim ~/.vimrcpliku, 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 hjednym 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 registersw Vimie, aby dowiedzieć się o możliwościach.

Również dostać kubek Vi .


1

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.


0

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 przez di x, więc "0pzawsze umieszcza to, co szarpałeś, niezależnie od tego, co zostało w międzyczasie edytowane.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.