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?
risposta
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>
Wow, cool! Dove posso trovare questo trucco nella documentazione di Vim? – innaM
Non sicuro. Ctrl-r è una cosa abbastanza ben nota. –
@Manni:: h c_CTRL-R –
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:
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>
Non è necessario dare uno strattone la parola, posizionare il cursore sulla parola e poi:
:%s/<C-r><C-w>/bar/g
Dolce! Questo è un altro di cui ero curioso! –
Ho sempre trovato fastidioso che la riga di comando di vim non abbia accesso a nessun registro, ecc. – inkedmn
Sono d'accordo al 100% con quello. Ciò farebbe una grande differenza. –
@inkedmn: cosa vuoi dire se non ha accesso ai registri? ctrl-r consente chiaramente di accedere ai registri di copia/incolla. –