2009-09-25 3 views
12

Diciamo che ho una parola selezionata in modalità visiva. Mi piacerebbe eseguire una sostituzione su quella parola e su tutte le altre istanze di quella parola in un file usando s //. C'è un modo per utilizzare il testo evidenziato nella parte s/<here>/stuff/ senza doverlo riscrivere?In VIM, è possibile utilizzare il testo selezionato nella clausola sostitutiva senza doverlo ridigitare di nuovo?

+0

Ho sempre trovato fastidioso che la riga di comando di vim non abbia accesso a nessun registro, ecc. – inkedmn

+0

Sono d'accordo al 100% con quello. Ciò farebbe una grande differenza. –

+4

@inkedmn: cosa vuoi dire se non ha accesso ai registri? ctrl-r consente chiaramente di accedere ai registri di copia/incolla. –

risposta

17

Certo. Se è stata selezionata la parola, basta ank "y", e poi il tipo:

:%s/<ctrl-r>"/something else/g 

Dove sta premendo tasto CTRL con il tasto R, ed "è solo" il carattere.

Tutti i tasti premuti:

y:%s/<ctrl-r>"/what to put/g<enter> 
+0

Wow, cool! Dove posso trovare questo trucco nella documentazione di Vim? – innaM

+0

Non sicuro. Ctrl-r è una cosa abbastanza ben nota. –

+0

@Manni:: h c_CTRL-R –

4

Se hai cercato per il testo prima di poter utilizzare

CTRL-R/

per inserire l'ultimo elemento di ricerca nella ricerca e sostituzione di stringa.

È possibile controllare questa pagina per altri trucchi simili:

http://www.vim.org/htmldoc/insert.html

0

Un altro modo per accedere al registro contenuto dalla riga di comando è tramite @ variabili. Quindi se inserisci il testo nel registro predefinito, sarà in una variabile denominata @".

:exe '%s/' . @" . '/stuff/' 

Ecco una mappatura per rendere questo facile da digitare:

vmap <Leader>s y:exe '%s/' . @" . '//g'<Left><Left><Left> 

Ora è possibile evidenziare qualcosa in modalità visuale, tipo \s, digitare la sostituzione e colpire Enter. Versione depesz s' fa anche una buona mappatura (quasi esattamente come lui digitato):

vmap <Leader>s y:%s/<c-r>"//g<Left><Left> 
4

Non è necessario dare uno strattone la parola, posizionare il cursore sulla parola e poi:

:%s/<C-r><C-w>/bar/g
+0

Dolce! Questo è un altro di cui ero curioso! –