2009-02-28 14 views
5

La mia domanda precedente sembra essere un po 'ambiguo, io riformulare:Vim copia e incolla

Ho un file in questo modo:

copythis abc 
replacethis1 xyz 
qwerty replacethis2 
hasfshd replacethis3 fslfs 
And so on... 

NOTA: replacethis1, replacethis2, replacethis3, ... potrebbero essere tutte le parole

Come sostituire "replacethis1", "replacethis2", "replacethis3", ... word con "copythis" word utilizzando i comandi minimi di vim.

Un modo che posso fare è di questi passaggi:

  1. delete "replacethis1", "replacethis2", "replacethis3", .. usando 'DW'
  2. copia "copythis" utilizzando yw' '
  3. spostare il cursore su dove "replacethis1" era e fare' p '; spostare il cursore su dove "replacethis2" era e fare 'p' e così via ...

C'è un modo migliore per farlo in VIM (utilizzando un numero inferiore di comandi vim)?

risposta

6

Dal momento che cambiato la tua domanda, lo farei in questo modo:

Passare al primo "replacethis1" e digitare cw (cambia parola), quindi digitare manualmente "copythis".

Passare al successivo "replacethis", premere. (Ripetere l'ultima operazione)

passare alla successiva "replacethis", colpiti.,

e così via, e così via.

Se "copythis" è una parola piccola, penso che questa sia la soluzione migliore.

+0

a seconda di come ci si sposta nelle diverse parole da sostituire, potrebbe essere meglio usare ciw (o caw) invece di cw. Per poter lavorare devi essere all'inizio di replacethis. – user55400

0

Hai provato a sostituire la stringa?

%s/replacethis/copythis 

Una serie di altri parametri è possibile per ottimizzare la sostituzione. Tuffati nell'aiuto Vim per maggiori dettagli. Altri esempi here.

1
:%s/copythis/replacethis/g 

Per sostituire tutte le occorrenze di copia con replacethis. Oppure si può specificare un intervallo di numeri di riga come:

:8,10 s/copythis/replacethis/g 

nota, il/g alla fine dirà a sostituire tutte le occorrenze. Se lo lasci, farà solo il primo.

+0

Vedere la mia domanda riformulata –

+0

Hai annullato i due termini. –

0

se u bisogno di fare sostanzialmente la stessa azione più volte - di swap prima parola di una riga con la seconda parola della riga successiva, dico si potrebbe registrare una macro e chiamarlo ogni volta che dovete

+0

Vedere la mia domanda riformulata –

1
  1. creare questa mappatura:

    : mappa z cwcopythis^[

    (^ [è il carattere di escape, è possibile digitare in vim usando Ctrl + V Ctrl + [)

  2. passare a ogni parola che si desidera sostituire e premere z

+0

Questo non funziona come dw sovrascrive il buffer di copia –

+0

Funzionerà, è lo stesso suggerimento del mio ma crea un collegamento personalizzato invece di usare il comando punto incorporato. Probabilmente è meglio usarlo se non stai sostituendo tutte le parole contemporaneamente. –

+0

Inizialmente avevo usato dw ma ho realizzato l'errore non appena ho ricevuto un messaggio, quindi l'ho modificato :) – Adnan

4

La cifra deve essere inclusa, e ci può essere d essere più di un'istanza per riga:

:%s/replacethis\d/copythis/g 
3

Dato che "replacethis [1-3]" possono essere parole indipendenti arbitrarie, il/modo semplice rapido per farlo globalmente sarebbe:

:%s/replacethis1\|replacethis2\|replacethis3/copythis/g 

(nota che devi usare \ | per far funzionare i tubi come "o". Altrimenti, vim cercherà il letterale | . Personaggio)

1

ho lottato con questo per un tempo troppo lungo, penso che ho appena lavorato fuori il modo più pulito:

Usa quello comando è pulito per mettere copythis nel registro r:

/copythis 
"rye 

Poi vai alla sostituzione e sostituirlo con il contenuto della r:

/replacethis 
cw<CTRL-R>r<ESC> 

allora si può solo n.n.n.n.n.n.n. per il resto di loro, o se sono selvaggiamente di fferent basta andare all'inizio di ogni e premere .

La chiave è in grado di sostituire e incollare in un solo passaggio in modo da poter utilizzare . in seguito.

0

È possibile rimappare ad es. il tasto m in modalità normale per eliminare la parola sotto il cursore e incollare il buffer: :nnoremap m "_diwP. Quindi è sufficiente copiare la parola desiderata, spostare il cursore ovunque sulla parola da sostituire e digitare m.

MODIFICA: la mappatura su m è una cattiva idea poiché viene utilizzata per contrassegnare le posizioni. Ma puoi usare per es. ; comunque.

Problemi correlati