Esecuzione di determinate operazioni senza cancellare il registro


30

Spesso, nei file di configurazione, potrei copiare e incollare un blocco di linee, quindi voglio apportare piccole modifiche a quel blocco. Dopo aver incollato, uso xper eliminare i caratteri che voglio rimuovere, quindi passare per incollare il blocco successivo. Tranne xinserisce i caratteri eliminati negli Appunti, quindi devo ricopiare nuovamente il blocco di linee.

C'è un modo per farlo senza andare in modalità inserimento?


Risposte:


35

Le tue opzioni sono:

  1. Usa il registro del buco nero _. Ad esempio, per eliminare una riga digitare "_dd. Questo elimina senza influire sugli Appunti.
  2. Denominare esplicitamente un registro per lo yank originale. Ad esempio, per trascinare una riga in un registro denominato, digitare e "ayyquindi incollare"ap
  3. Utilizzare invece i registri yank per recuperare lo yank originale. Puoi strattonare, quindi eliminare se necessario, quindi quando vai a incollare il tipo"0p
  4. Utilizzare un plug -in come vim-easyclip per fornire un operatore di taglio distinto dall'operatore di eliminazione (informativa completa: l'ho scritto)

Corri :help registersper maggiori dettagli sui primi 3


4
Quindi per xusarlo "_xallora?
durron597,

1
È corretto.
Steve Vermeulen,

2
@ durron597 se stai eliminando un carattere alla volta con x, probabilmente dovresti imparare a eliminare i movimenti come quelli dt)che vengono eliminati fino alla successiva parentesi chiusa di d2Wcui elimina i due successivi token separati di spazi bianchi. Quindi potresti fare qualcosa di simile "_di{all'interno di una regione rinforzata, cosa che faccio sempre. In modalità normale questo significa " elimina tutto ciò che è all'interno di questa regione rinforzata nel buco nero "
OregonTrail

Aggiunto nnoremap x "_xal mio ~/.vimrc(spiegazione qui: stackoverflow.com/questions/54255/… ).
Victoria Stuart,

11

xnon mette cose negli appunti, le mette in un registro . Se non gli dici in quale registro inserirlo, lo inserisce nel registro senza nome, che ovviamente sovrascrive i contenuti precedenti. Quindi, invece, digli quale registro usare " REGISTER x:, dove REGISTER è una singola lettera. Quindi si utilizza lo stesso prefisso del registro delle virgolette pper incollare da quel registro. (Nota: le lettere minuscole sostituiscono il loro contenuto; le lettere maiuscole vengono aggiunte).

Ci sono anche due registri speciali "0e "1. "0è il ytesto yanked ( ) più recente , che rimarrà anche se si elimina del testo con un altro comando (come x). "1è il testo eliminato più di recente, purché tale testo non sia di piccole dimensioni (una riga). Viene inserito un piccolo testo eliminato "-.

Infine, come sottolinea Steve Vermeulen, puoi dire a Vim di non salvare il testo cancellato specificando il registro del buco nero "_.

Il comando di aiuto pertinente è :help registers.


3

Il :letcomando ti permetterà di ridefinire un registro con nome. Nella riga di comando di vim, premendo Control+ R due volte 1, quindi il nome del registro incollerà il contenuto del registro nel comando. Quindi è possibile modificare ciò che è incollato e salvare il registro con le modifiche.

Esempio:

  • In modalità normale, su una riga contenente il testo "Foo Bar", digitando si "fyystrappa l'intera riga ( yy) nel fregistro ( "f).
  • Digita :let @f='e Control+ r, Control+ di rnuovo, quindi f, e dovresti vederlo incollare in "Foo Bar", quindi la tua riga di comando ora legge :let @f='Foo Bar, con il cursore alla fine.
  • Ora puoi usare le frecce ed eliminare i tasti per modificare ciò che hai appena incollato, ad esempio :let @f='foo bar baz.
  • Termina la citazione: :let @f='foo bar baz'e premi Enter.

Ora hai ridefinito il contenuto del fregistro in "foo bar baz".

(Funziona anche con le macro! :help letPer ulteriori informazioni.)


1 Control + rti consente di inserire un registro quando sei già in modalità inserimento, come se stessi digitando i caratteri. L'uso di questa sequenza due volte è importante perché "il testo viene inserito letteralmente, non come se fosse stato digitato. Ciò differisce quando il registro contiene caratteri simili <BS>". - il file insert.txt vimdoc,:help i_CTRL-R_CTRL-R


0

In relazione al registro del blackhole "_menzionato da @derobert è possibile trovare uno screencast utile su http://vimcasts.org/episodes/meet-the-yank-register/

Vim usa i termini delete, yank e put, al posto della terminologia più standard taglia, copia e incolla. A partire dalla stessa lettera, mettere e incollare sono facilmente intercambiabili. Una volta che ti sei abituato alla parola yank, diventa sinonimo di copia. Ma l'uso di Vim della parola "elimina" è problematico. Nella maggior parte dei contesti, la parola elimina significa semplicemente rimuovere. Ma l'operazione di eliminazione di Vim copia il testo in un registro, quindi lo rimuove dal documento. In altre parole, l'operazione di eliminazione di Vim si comporta come un taglio.


2
Questo non fornisce una risposta alla domanda. Per criticare o richiedere chiarimenti a un autore, lascia un commento sotto il suo post: puoi sempre commentare i tuoi post e una volta che avrai una reputazione sufficiente sarai in grado di commentare qualsiasi post .
Jamessan,

Ho provato a commentare il post originale ma non ci sono riuscito. L'unica alternativa che ho avuto è stata quella che ho scelto @jamessan
Marlon León il

0

Plugin Sostituisci con registri

http://www.vim.org/scripts/script.php?script_id=2703 (2009-2014)

Suggerisce la mappatura gr.

  1. strattone
  2. selezionare visivamente il testo che si desidera sostituire e premere gr
  3. passa al blocco successivo che desideri sostituire

In alternativa, utilizzare gr<text object>per farlo senza una selezione visiva. dot-repeat è supportato quando sono installati i plugin repeat.vimdi Tim Pope e visualrepeat.vimdi Ingo Karkat.

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.