2010-11-02 16 views
13

Dopo un po 'di mesi, sto diventando sempre più a mio agio con Vim. MA, c'è solo una funzione semplice che non riesco a ottenere alcuna risposta dal web. Questo è "Cerca e sostituisci i risultati". Il problema è che so:Vim - Cerca e sostituisci i risultati

:/parola chiave per cercare, e premere Invio "parola chiave" sarà evidenziato (ovviamente con set hlsearch) n, o N per navigare

:% s/parola/new_keyword/g per sostituire tutte le occorrenze di parole chiave con new_keyword.

MA, penso che ci sia un modo per cercare e sostituire la parola chiave con corrispondenza (evidenziata) con qualsiasi nuova parola chiave SENZA fare ":% s/parola chiave/nuova_keyword/g", che è un sacco di digitazione considerando search & replace è una funzionalità di tipo day-to-day.

Tutte le risposte/commenti saranno molto apprezzate!

risposta

27

Se è già stata effettuata una ricerca, è possibile eseguire una sostituzione per lo stesso motivo semplicemente ignorando lo schema nel comando sostitutivo. ad esempio:

/keyword 

searchs per "parola chiave", e poi:

:%s//new_keyword/g 

sostituirà tutte le occorrenze di "parola chiave" con "new_keyword".

+1

Non lo sapevo, molto utile. – meagar

+1

Bello - la prima cosa che ho aggiunto alla mia lista di "saggezza vimitata" da un po '. – Stew

+0

Grazie Laurence, è quello che ESATTAMENTE volevo, e non sono un utente Vim più felice :) Ciao! – Khiet

3

Cercare e utilizzare il comando punto (non si intendeva che si sta utilizzando il comando punto, è per questo che lo evidenzio) ripetere l'ultima azione di input è la soluzione migliore qui.

Io uso s /// g per cercare e sostituire.

+0

Grazie Ronny, non come una soluzione generale efficiente per me MA mi ricorda un comando Vim importante ".". Saluti!!! – Khiet

+0

È IL comando più importante! –

1

Passare alla prima evidenziato parola poi registrare una macro per sostituire la parola e passare a quello successivo, ad esempio:

 
gg 
n 
qq 
caw new_word^[ 
n 
q 
@q 
@@ 
@@ 
... 
+0

Questo è un * inferno * di molto più tipizzazione che semplicemente ridigitare la parola chiave in ':% s /.../.../ g' – meagar

+0

@meagar: vero, ma la domanda non era come farlo nel il minor numero di battute, come fare senza:% s – Cercerilla

+0

@meagar: non quando puoi semplicemente premere '.' per continuare a ripetere la stessa cosa. –

2

Beh, visto # parola chiave # e # new_keyword # conto per la maggior parte dei personaggi , e hai bisogno di un modo per distinguere tra loro (cioè un personaggio in vim, o una tabulazione tra i campi di inserimento in una finestra di dialogo in un editor diverso), ti restano forse quattro o cinque sequenze di tasti oltre.

Quindi penso che probabilmente stai sovrastimando il numero di tasti e dimenticando anche che (1) diventa molto naturale, e (2) lavorare in questo modo ti permette anche di modificare naturalmente l'azione eseguita specificando un intervallo o un'opzione diversa bandiera.

Ma è possibile ridurre le sequenze di tasti. Se vuoi puoi mappare una chiave per far apparire automaticamente la riga di comando con '% s /' già sul posto. es .:

nmap s :%s/ 

Il comando sopra sarebbe rimappare 's' (io non sto raccomandando rimappatura a quella chiave, ma dà l'idea) e impostare fino a inserire la parola chiave.

Inoltre, è possibile impostare l'opzione 'gdefault' come predefinita per sostituire più volte per riga. Questo permette di saltare il finale '/ g' nelle vostre combinazioni di tasti:

set gdefault 

See ': h gdefault' per la sezione di aiuto su tale opzione.

Alla fine direi che mi sono appena abituato al modo predefinito in cui funziona, perché utilizzarlo in questo modo consente di mantenere le stesse operazioni di base quando si desidera specificare diversi intervalli o flag di opzioni e la creazione di una nuova mappa speciale è solo un'altra cosa da ricordare. gdefault può valere la pena impostarlo se si pensa che lo si vorrà per la maggior parte del tempo, aggiungendo il flag/g alla fine quando gdefault è impostato ha l'effetto di girare/g fuori. . .

+0

Grazie mille Herbert, molte informazioni utili e suggerimenti. Soprattutto, trovo set gdefault e/g per dinamicamente disinserito è bello e non lo saprei. Saluti!!! – Khiet

Problemi correlati