Me parece que si ingresa un prefijo numérico antes de ejecutar un comando ex, la convención que aplica es configurar el comando para preparar una operación en un rango de línea. Se explica en la documentación,
UN NÚMERO DE LÍNEAS
Cuando sepa cuántas líneas desea cambiar, puede escribir el número y luego ":". Por ejemplo, cuando escribe "5:", obtendrá:
:.,.+4
Ahora puede escribir el comando que desea usar. Utilizará el rango "." (línea actual) hasta ". + 4" (cuatro líneas hacia abajo). Por lo tanto, abarca cinco líneas.
Ahora lo que estoy tratando es una función personalizada mía, esta:
function! MyAmazingEnhancedDot()
if v:hlsearch == 1
:normal! .n
else
:normal! .j
endif
endfun
Esta es solo una forma de simplificar las tareas repetitivas que incluyen repetir una operación en un rango de líneas o en una serie de coincidencias de búsqueda.
Esta función está vinculada a una tecla de acceso rápido. Tales como Alt+ .o lo que sea.
Mi objetivo es poder hacer algo muy poderoso: debería ser capaz de escribir /varName<CR>ciwnew-var<ESC>n9<Alt+.>
para renombrar 10 instancias de varName
to new-var
.
Lo que realmente sucede si hago esto es que no realiza el cambio de nombre y las 9 líneas se manipulan con mi .
operación de edición guardada desde la columna 0.
Sólo puedo suponer que Vim está interpretando mis pulsaciones de teclado así: :.,.+8 normal! .n
.
En el lado del vaso medio lleno, el :normal! .j
caso del enlace realmente funciona, porque el j
movimiento que no tiene efecto no tiene ninguna consecuencia en esta situación. (Todavía necesito el j
para que funcione en un caso de uso interactivo sin prefijo numérico).
Entonces, mi pregunta es ¿cómo puedo anular el comportamiento de expansión de línea que Vim aplica a mi enlace? Lo que sería fantástico es si puedo leer el prefijo numérico como argumento o algo así.
nnoremap <M-.> :<C-u>call MyAmazingEnhancedDot(v:count1)<cr>
y omitir elcommand -count=1 EDot call MyAmazingEnhancedDot(<count>)
?