Estoy tratando de entender cómo puedo usar el operador con el movimiento posterior dentro de un mapeo. Por ejemplo:
nmap /c c{here we pending for a motion}/<C-r>"<CR>
El mapa debe hacer lo siguiente:
- Active el
c
operador y escuche el próximo movimiento; - Por ejemplo, puedo escribir aquí
t,
para cambiar todo antes de la próxima coma; - Vaya al modo de inserción eliminando todo entre el cursor y la coma;
- El texto eliminado se busca automáticamente como un patrón
Para decirlo de manera simple, después de eliminar el texto de movimiento, me dejo en modo de inserción con las ocurrencias resaltadas del texto eliminado. Estaría muy agradecido si alguien me ayudara a resolver este caso.
ACTUALIZAR
Las respuestas son casi lo que quiero. ¡Pero! Cuando presione /cw
, escriba algo en lugar de la palabra, luego presione <Esc>
. Después espero hacer lo mismo con las próximas ocurrencias. Pero después de presionar n
(ir a la siguiente aparición) y .
(repetir el último comando) simplemente antepone el último texto escrito en lugar de reemplazarlo. El objetivo principal del mapeo es usarlo con n/N
y .
para repetir. ¿Me he perdido algo?
fuente
/c
yi
) vim.
solo repite el último. Si desea extenderlo, verifique elrepeat
complemento. @TimurFayzrakhmanov también hay:g
y:s
comandos, pueden ayudarte también."
en tu código'let @/=@""'
? Pensé que era posible, por ejemplosilent exec 'normal!
[v]c'
, porque elc
operador hace lo que esperaba, excepto que no agrega el texto modificado al patrón de búsqueda.""
fue un error tipográfico ... arreglo ... También se me ocurrióc
, sin embargo, agregó un espacio, porque hay un cambio de modon-i-n-i
, supongo ... haz alguna prueba que verás.d
ay
ystartinsert
paracall feedkeys("cgn", 'n')
(vea mi respuesta a continuación)Es más fácil implementar (y documentar) asignaciones complejas mediante el uso de funciones:
Luego haga que su mapeo llame a esa función:
Editar:
Si su intención es llevar a cabo la búsqueda y reemplazar en un gran número de lugares a los que debe tratar el comando sustituto:
:s
. Puede cambiar su mapeo para copiar la selección visual al patrón de búsqueda:fuente
enter motion:
, dio:t,ggVGJZZ
^ _ ^ Es un problema común para la concatenación de comandos/cw
luego escribo algo en lugar de la palabra, luego presiono<Esc>
. Después quiero hacer lo mismo con las próximas ocurrencias. Pero después de presionarn
(ir a la siguiente aparición) y.
(repetir el último comando) simplemente antepone el último texto escrito en lugar de reemplazarlo. El objetivo principal del mapeo es usarlo conn/N
y.
para repetir. ¿Me he perdido algo?.
repita su comando.<CR>
deinput()
).Esta solución funciona con "repetir último comando" (también conocido como
.
):Al repetir, ni siquiera necesita usar
n
, solo puede usar.
para buscar directamente y reemplazar la siguiente ocurrencia si desea ir más rápido.Opcionalmente, si desea resaltar las palabras coincidentes, puede reemplazar
'cgn'
por'n``cgn'
.fuente