2012-05-06 12 views
20

In Vim, quando faccio:Vim sostituire tutto senza cursore a movimento

:%s/foo/bar/g 

sostituirà tutte le occorrenze di 'foo' con 'bar' nell'intero documento. Al termine, il cursore si è spostato sull'ultima posizione in cui 'foo' è stato sostituito con 'bar'.

Come si esegue :%s/foo/bar/g senza che il cursore lasci la posizione originale prima di emettere questo comando?

C'è qualche opzione che posso impostare nel file .vimrc?

+6

Non si è sicuri di farlo senza spostare il cursore, ma è possibile spostarlo indietro premendo a virgolette singole due volte. –

risposta

23

Ho appena digitare Ctrl +O dopo la sostituzione di tornare alla posizione precedente.

+0

@lucapette Grazie per la modifica della formattazione. –

+0

@ib. mai stanco di dare risposte più perfette :) – sehe

+1

Esiste un comando ":" per questo? – Bunder

25

Quando viene eseguito il comando :substitute, prima che le sostituzioni effettive vengano eseguite, la posizione del cursore viene memorizzata in una lista di salto. Per tornare alla posizione prima del salto più recente, è possibile utilizzare i comandi Modalità normale nella modalità Normale . Mentre il primo salta esattamente alla posizione memorizzata, il secondo sposta il cursore sul primo carattere non vuoto sulla riga in cui si trova la posizione .

Quindi, per tornare rapidamente il cursore torna alla sua posizione originale, il tipo `` dopo la sostituzione di comando è terminato.

Per combinare sostituendo e spostando il cursore in un unico comando, questione

:%s/pat/str/g|norm!`` 

o, se è abbastanza per saltare non per la posizione precisa, ma solo alla sua linea,

:%s/pat/str/g|'' 

Come mostrato sopra, '' può essere usato preferibilmente a norm!'' nel secondo comando a causa della sintassi di intervallo dei comandi Ex (vedere :help :range).

+0

Bel tentativo. Ma non elegante. usa 'Ctrl-o'. – mattn

+0

@mattn: Secondo quale criterio usare 'Ctrl' +' O' è elegante, mentre '\' \ '' non lo è? Quest'ultimo comando non è più lungo di quello precedente in termini di tasti; entrambi portano allo stesso movimento del cursore in questo caso. Perché trovi pressante '\' \ '' (invece di 'Ctrl' +' O') inelegante? –

+0

È una risposta semplice. più lungo di c-o. E il tuo comando aggiorna jumplist. Se uso la tua strada, userò g'. :) – mattn