2009-04-21 3 views

risposta

50

Selezionare il testo in modalità visiva (presumo che è quello che si sta facendo), quindi premere : per iniziare a digitare un comando, vedrete qualcosa di simile apparirà nella riga di comando:

:'<,'> 

Ciò significa che il comando si applicherà alla selezione. Quindi digitare s/search/replace/ e premere invio. (Aggiungi un g dopo la terza barra se si desidera sostituire tutte le partite, e un c se si desidera una conferma per ogni sostituzione)

+28

Avvertenza: la gamma funziona solo in linea! Se la tua selezione contiene solo parte di una linea, la ricerca e la sostituzione funzioneranno su tutta la linea. Ottenere la ricerca e il rimpiazzo di linee parziali richiede scripting afaik. – user55400

+2

Suggerisco di spostarlo temporaneamente su una linea diversa, fare la sostituzione e spostarla indietro. –

13

Se è stato utilizzato la modalità visiva per selezionare, poi:

:'<,'>s/regex/replacement/options 

VIM posizionerà la gamma ('<,'>) automaticamente se si va in modalità riga di comando (premendo ':') dalla modalità visuale.

+1

Questo dovrebbe teoricamente funzionare come previsto, ma come indicato da qualcun altro, in pratica si sostituisce ovunque all'interno delle linee in cui il segno '<' inizia e dove '>' finisce. Forse è possibile farlo funzionare con l'atomo '\% '>. Ma i miei esperimenti iniziali fallirono. –

+0

Hai ragione. Non l'ho mai notato – Tomalak

-3

Se si vuole fare un globale ricerca e sostituzione (con regex opzionale) per tutte le istanze del file, vorrei fare quanto segue:

:%s/foo/bar/g 

omettere le g di fare sostituire un locale.

+0

Il locale è locale alla riga corrente – Lazarus

66

La maggior parte delle altre soluzioni suggerite qui funziona sull'intera riga in cui si verifica la selezione, che potrebbe non essere quello che si desidera.

Per cercare e sostituire SOLO nella selezione, prima selezionare visivamente il testo, quindi utilizzare un comando in questo modo:

:%s/\%VSEARCH/REPLACE/g 

Questo farà la ricerca e sostituzione solo nella sezione selezionata visivamente, in sostituzione di ricerca con SOSTITUIRE. Se hai più di una linea selezionata, questo funzionerà anche su più linee.

+0

Questo lavoro dovrebbe essere sostituito quando si seleziona visivamente una parte di una linea? Non riesco a farlo funzionare per sostituire gli spazi con il ritorno. Sto selezionando parte della linea e stanno usando ':% s/\% V/\ r/g' senza gioia. Il primo spazio viene sostituito, ma i seguenti 4 rimangono intatti. – bentayloruk

+0

L'ho appena provato e funziona per tutti i casi che ho provato, tranne che per la sostituzione con un ritorno ;-) Penso che sia dovuto al fatto che la prima sostituzione interrompe la selezione in una nuova riga, che non è più nella selezione. Come soluzione alternativa, è possibile sostituire con una stringa univoca, ad es. EZ_REPLACE, quindi eseguire una ricerca globale e sostituirla per quello ... –

+0

non funziona correttamente quando viene ricodificato in una macro. la riproduzione della macro su un intervallo di linee non funziona. –