Si tengo lo siguiente:
function foo(bar) {
return bar + 1;
}
Y solía cw
cambiar el primero bar
a baz
, ¿cómo salto a la siguiente coincidencia bar
, para .
poder hacer el mismo cambio?
No puedo usar *
, porque eso busca la palabra actual debajo del cursor, y tontamente no busqué por bar
primera vez, así n
que no funcionará.
¿Hay una manera simple de buscar la próxima aparición de la palabra tal como estaba antes de cambiarla?
Yo no quiero hacer una búsqueda y reemplazo, ya sea porque hay otras ocurrencias de bar
en mi archivo que no desea cambiar, o porque sólo había dos instancias de bar
, y me había olvidado :%s/bar/baz/
antes de empezar y eso es demasiado mucho esfuerzo para cambiar la única instancia restante.
*
búsqueda. Especialmente hace*
que seleccione visualmente la palabra actual sin mover el cursor. Una vez que esté instalado, puede hacer*ciw
para poner la palabra antigua en el registro de búsqueda y cambiar la palabra. Entonces puedes usarn
y.
.n
que no funcionará.Respuestas:
El texto con el que acaba de cambiar
cw
se cortó en el registro sin nombre para que pueda reutilizarlo con:para saltar a la siguiente aparición del texto cubierto por su último cambio.
fuente
Para extender fuera de romainl como un flujo de trabajo completo ...
Si está más interesado en realizar una edición de este tipo y luego se da cuenta de que necesita aplicar las mismas ediciones sobre un párrafo / función, puede usar los registros
"
y.
.En su ejemplo, puede realizar la edición inicial del argumento. Si ingresa al modo visual (usaría Visual Line solo para asegurarme de que selecciona todo correctamente) y luego aplica una búsqueda y reemplazo.
V]] - Línea visual, al final del párrafo / función.
:'<,'>
Este patrón tarda un poco en acostumbrarse, ya que tiene que usarlo. La mayoría de las veces querrá simplemente aplicar la función de buscar y reemplazar a toda la función, incluido el argumento, pero es una buena manera de no realizar el antipatrón "Hacer el trabajo, darse cuenta de que debería haberlo hecho mejor, deshacer y rehacer correctamente."
fuente
Si no le importa presionar una combinación diferente
cw
, entonces creo que puede obtener lo que quiere fácilmente, definiendo un acceso directo. Lo que puedes hacer es colocar lo siguienteen su
.vimrc
archivo Tenga en cuenta que^M
es una captura de la tecla de retorno, y no los caracteres^
yM
. Lo obtienes presionando Ctrl+ Ven modo de inserción seguido de Enter. Ahora, con esto definido, presionar<leader>a
hará lo mismo quecw
, pero ahora la palabra (antes del cambio) estará en su "último registro de búsqueda" (es decir, el/
registro), así que presionar ndespués de haber realizado el cambio y regresado al modo normal lo llevará a la próxima aparición. Del mismo modo, presionar lo Nllevará a la ocurrencia anterior.El acceso directo Por supuesto, puede elegir un acceso directo diferente que
<leader>a
, pero me parece que este es un acceso directo muy accesible. Personalmente, lo configuré<leader>
para,
que solo necesite presionar ,seguido a, pero esto se debe a que no uso un teclado estadounidense, por lo que mi \está algo oculto (creo que \es el valor predeterminado<leader>
).Explicación La idea es realmente simple. Tira la palabra debajo del cursor al registro de búsqueda
/
y luego hazlocw
. Por lo tantonmap <leader>a "/yciw
era lo que yo buscaba, pero por desgracia no creo que se puede tire del mismo para el registro de búsqueda, por lo que la solución es dar un tirón a la palabra bajo el cursor al1
registro, a continuación, establecer el/
registro igual a eso, y luego hacescw
. Así"1yiw
es la parte que tira de la palabra interna debajo del cursor al registro1
. Si no sabe acerca de las palabras internas, puede verificar:help iw
. Luego,:let @/=@1
sigue una captura de Enterpone los contenidos del1
registro en el/
. En este punto nyNfunciona como la ocurrencia siguiente y anterior de la palabra debajo del cursor, y luegociw
se hace a para que la palabra debajo del cursor se elimine y Vim se ponga en modo de inserción.palabra versus palabra interna Me acabo de dar cuenta de que asumí que querías la palabra completa debajo del cursor y no solo desde el punto del cursor y en adelante. Es por eso que usé en
iw
lugar de enw
todas partes. Si este no es el caso, entonces debe usaren lugar. Si el cursor está en la primera letra de la palabra, no hay diferencia.
descargo de responsabilidad Esta solución probablemente no funcionará bien si intenta usarlo en algo que contiene diferentes cosas de letras, por ejemplo haciendo que el soporte cursor en una
\
o sustituyendoiw
poriW
,ib
,is
oip
, o algo (aunque no sé por qué lo haría quiere esta característica con oraciones completas)fuente