2012-05-06 18 views
20

En Vim, cuando lo haga:Vim reemplazar todo sin mover el cursor

:%s/foo/bar/g 

que reemplazará toda ocurrencia de 'foo' con 'bar' en todo el documento. Cuando se completa, el cursor se ha movido a la última posición donde 'foo' fue reemplazado por 'bar'.

¿Cómo se ejecuta :%s/foo/bar/g sin que el cursor abandone la posición original antes de emitir este comando?

¿Hay alguna opción que pueda establecer en el archivo .vimrc?

+6

No estoy seguro de hacerlo sin mover el cursor, pero puede moverlo hacia atrás presionando comillas simples dos veces. –

Respuesta

23

acabo escriba Ctrl +O después de la sustitución de recuperar el la ubicación anterior.

+0

@lucapette Gracias por la edición de formato. –

+0

@ib. nunca se cansa de hacer las respuestas más perfectas :) – sehe

+1

¿Hay un comando ":" para esto? – Bunder

25

Cuando se ejecuta el comando :substitute, antes de que se realicen los reemplazos, la posición del cursor se almacena en una lista de salto. Para volver a la posición antes del último salto, se pueden usar los comandos `` o '' Normal . Mientras que el anterior salta exactamente a la posición almacenada, el último mueve el cursor al primer carácter que no está en blanco en la línea donde se encuentra esa posición .

Por lo tanto, para volver rápidamente el cursor de nuevo a su ubicación original, el tipo `` después de que se terminó comando de sustitución.

Para combinar la sustitución y moviendo el cursor en el mismo comando, tema

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

o, si es suficiente para saltar no a la posición precisa, pero sólo para su línea,

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

Como mostrado arriba, '' se puede usar con preferencia a norm!'' en el segundo comando debido a la sintaxis de rango de los comandos Ex (ver :help :range).

+0

Buen intento. Pero no elegante. Debería usar 'Ctrl-o'. – mattn

+0

@mattn: Según qué criterio usar 'Ctrl' +' O' es elegante, mientras que '\' \ '' no? El último comando no es más largo que el anterior en términos de pulsaciones de teclas; ambos conducen al mismo movimiento del cursor en este caso. ¿Por qué te parece que presionar '\' \ '' (en lugar de 'Ctrl' +' O') es poco elegante? –

+0

Es una respuesta simple. más largo que c-o. Y tu actualización de comando jumplist. Si uso tu camino, usaré g'. :) – mattn

Cuestiones relacionadas