Pregunta:
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 operador
c
y escuche el siguiente movimiento; - Por ejemplo, puedo escribir aquí
t,
para cambiar todo antes de la siguiente coma; - Vaya al modo de inserción eliminando todo entre el cursor y la coma;
- El texto eliminado se busca automáticamente como patrón
Entonces, para decirlo de manera simple, después de eliminar el texto en movimiento, me dejan en modo de inserción con apariciones resaltadas del texto eliminado. Estaría muy agradecido si alguien me ayudara a resolver este caso.
ACTUALIZAR
Las respuestas son casi las que quiero. ¡Pero! Cuando /cw
, /cw
algo en lugar de la palabra, luego presione <Esc>
. Después espero hacer lo mismo con las próximas apariciones. Pero después de presionar n
(ir a la siguiente aparición) y .
(repita el último comando) simplemente antepone el último texto escrito en lugar de reemplazarlo. El objetivo principal del mapeo es usarlo con n/N
y .
repetir. ¿Me he perdido de algo?
Respuesta:
vim admite mapeo de operador :h map-operator
.
Lo que necesita es una función de operatorfunc
y un mapeo. para sus necesidades, los siguientes códigos funcionan. Bueno, es solo un ejemplo, lo refina aún más.
nmap <silent> /c :set opfunc=SpecialChange<CR>g@
function! SpecialChange(type)
silent exec 'normal! `[v`]d'
silent exec 'let @/=@"'
startinsert
endfunction
Tenga en cuenta que exec 'let @/=@"'
solo para resaltar los códigos en el búfer. Si no desea ver el resaltado inmediatamente, puede let @/=@"