Copia, elimina, quindi incolla in Vim


15

Ho appena iniziato con Vim ieri e ho difficoltà a capire copia e incolla. Capisco di copiare, accedo alla modalità visiva, evidenzio e poi strattone. Mi sposto quindi sulla riga su cui voglio incollare, ma più spesso non ho bisogno di eliminare del testo da questa riga. Lo faccio usando xo dw. Ciò si traduce quindi in una mia copia originale sovrascritta (come xe dwsembra tagliare). Come posso aggirare questo?

Per dirlo in un esempio

$foo = $this->foo->property;
thislineuses($foo);

Quindi, con il codice sopra che copio $this->foo->property, vorrei andare alla riga 2, eliminare $fooe incollare. Il problema è che quando elimino $foodalla riga 2 questo è ciò che viene incollato anziché $this->foo->property.

Risposte:


16

Dai un'occhiata :h copy-move. Lo yank o l'eliminazione predefiniti vanno in un posto chiamato registro (un registro denominato "). Se devi eliminare del testo prima di incollarlo, devi evitare di sovrascrivere il registro x, come hai scoperto. Fortunatamente, puoi usare qualsiasi altra lettera o numero per nominare un altro registro.

  • "ayy(trascina una riga nel registro a)
  • x, ddecc. (elimina del testo nel registro senza nome, ")
  • "ap(incolla il testo dal registro a)

9

Se il problema è che devi semplicemente sostituirne alcuni textcon alcuni text2, allora evidenzia e strappa text2. Quindi evidenziare texte premere po Pper incollare text2al posto di text.

Una rapida ulteriore guida per alcuni comandi comuni di vim è http://www.catswhocode.com/blog/100-vim-commands-every-programmer-should-know

Godere!

Modifica: nota che pincolla il testo dopo il cursore e Pprima del cursore.


questo è bello perché non devi pensare ai registri intermedi in cui tirare. funziona e basta.
Jon Schoning,

7

Puoi copiare in un registro con nome "ayw, fare la tua cancellazione e quindi incollare dal registro con nome "ap.

Tuttavia, di solito è più semplice cambiare semplicemente l'ordine in cui fai le cose. Fai l'incolla e poi cancella, oppure cancella e poi copia / incolla.

In alternativa, è possibile eliminare nel registro del buco nero "_d. Vedi /programming//q/54255/70863


3

Esistono vari registri che è possibile utilizzare per contenere valori di testo diversi. Se desideri salvare il testo in un registro diverso rispetto a dove andrà il testo eliminato (ovvero dall'uso di xo d w), utilizza quanto segue:

Per salvare il testo nel registro a:

  • premi " a[yank and command command] (salva il testo nel registro a)
  • vai dove vuoi incollare il testo
  • premi " a p(incolla il testo dal registro a)

È possibile utilizzare un registro per ciascuna delle lettere sulla tastiera e per ogni numero. L'eliminazione del testo non utilizzerà tali registri, quindi il testo rimarrà nel registro fino al termine della sessione o all'inserimento manuale di qualcos'altro.


0

Non è necessario evidenziare l'intera riga se si utilizza la modalità visiva v(al contrario V). Se è quello che stai chiedendo.

Se stai parlando di modificare il testo copiato, quindi prima copia e cancella le parti.

E se vuoi copiare, quindi modifica l'originale e quindi incolla, quindi puoi trascinare in un altro registro. Come "2y, quindi modificare, quindi andare altrove e "2p.

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.