vim: posso fare * solo * y eseguire una copia?


11

Sto imparando ad apprezzare Vim, ma una cosa che non ho ancora completamente abbracciato è la situazione di copia e incolla. In un editor di testo Babbano vorrei Ctrl: Ccopiare un pezzo di testo e quindi modificare / eliminare e quindi incollare il testo altrove. Comunque in vim non posso farlo perché dopo aver copiato il testo y, la modifica del testo spesso implica de xche cancella il mio testo originale.

Esiste un modo per creare de xnon copiare il testo? O altrimenti, come dovrei usare queste funzionalità vim?

Risposte:


16

Le 9 yanks precedenti vengono memorizzate nei registri chiamate 1attraverso 9. Puoi ricordare il penultimo con "1p, il precedente con "2pe così via. Il comando :regmostra i registri disponibili per incollare.

Se vuoi che uno yank duri più a lungo, usa un registro di lettere .

Per i comandi più oscuri relativi allo yank, inizia a leggere :help "nel manuale.


2
Inoltre, il registro 0 contiene l'ultimo testo estratto (anziché eliminato). Quindi, facendo riferimento alla domanda originale, puoi fare uno strattone y, continuare a modificare includendo de x, e incollare il testo strattonato con"0p
Nefrubyr,

@Nefrubyr, il tuo commento sopra è in realtà la risposta più semplice, ma non è menzionato in nessuna delle tre risposte esistenti. Forse dovresti aggiungerlo? (Potrei se non lo fai.)
Wildcard

9

I comandi di cui stai parlando usano il cosiddetto registro "senza nome". È pensato solo per un uso a breve termine. "Sto per strapparlo da qui e metterlo laggiù" in un certo senso.

Quando vuoi trattenere qualcosa per più di qualche secondo mentre vai e fai qualcos'altro, dovresti usare i registri con nome.

Ad esempio, " a y ystrapperà la riga su cui si trova il cursore nel aregistro. Nulla lo bloccherà accidentalmente, a meno che non si digiti un altro comando che coinvolga il aregistro. Minuti, ore, persino giorni dopo, puoi digitare " a pper eliminare quella copia strappata della linea dal aregistro sotto quello su cui si trova il cursore.

(Perché questo funzioni davvero bene, dovresti avere una linea come set viminfo='50,\"1000nel tuo ~/.vimrcfile, per dirgli di ricordare cose come registrare i contenuti attraverso le sessioni di Vim. Puoi quindi andare in vacanza tra yank e put!)

Ci sono 26 registri nominati (az). Se le dai in maiuscolo anziché come mostrato sopra, aggiungi al contenuto del registro corrente invece di sostituirli. Quindi, puoi costruire qualcosa di veramente complesso, per esempio, registrare hun pezzo alla volta, quindi lanciarlo tutto in una volta con " h p.

Si noti che il nome del registro è facoltativo. Ciò implica che potrebbero esserci molti comandi che già conosci e usi dove potresti usare registri con nome. Dì :help registersin Vim per avere un'idea delle possibilità.

Inoltre, prendi una tazza Vi .


1

Se devi eliminare il testo con d senza alterare il tuo registro yank (ad esempio, hai già strappato il testo in esso che non sei pronto per incollare prima di eliminare un altro testo, ad esempio), puoi usare il registro del buco nero _ .

Se lo fai "_ddad esempio, la riga corrente verrà immediatamente cancellata e dimenticata.

In realtà, non uso questo registro molto spesso. Non ci vogliono meno battute del salvataggio in un registro per uso generale (qualsiasi registro di lettere) e se si salva in un registro per uso generale, almeno, le righe che sono state eliminate sono ancora disponibili fino a quando non si sovrascrive il registro, se sorge la necessità.

Se si tende a dimenticare di usare un altro registro durante l'eliminazione, è possibile definire una macro wrapper per ddesempio in questo modo: :noremap dd "add.


0

Come è stato sottolineato nei commenti alla (corrente) risposta accettata, il modo canonico per farlo è usare il registro zero ( "0). Register zero contiene sempre l'ultimo yank e non verrà sovrascritto da de x, quindi "0pmette sempre tutto ciò che hai strappato indipendentemente da ciò che è stato modificato nel frattempo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.