¿Hay alguna forma de detectar si estoy grabando en vimscript?

Pregunta:

Hay algo como

eval("is_recording()")

que puedo llamar en mi vimscript para averiguar si actualmente estoy grabando una macro? Hubiera pensado que esto funciona:

eval("mode(1)")

pero eso solo devuelve "n" .

No estoy seguro de si importa, pero estoy usando neovim, así que si es exclusivo de neovim, está bien.

Respuesta:

En primer lugar, creo que su problema es principalmente un problema XY . Debería darnos más información sobre lo que está tratando de hacer al final y creo que podríamos encontrar otra solución.

Ahora, aquí hay una solución alternativa, probablemente no sea ideal y ciertamente no sea muy robusto, pero puede agregar estas líneas a su .vimrc :

let g:isRecording = 0
nnoremap Q :call ToggleRecording()<CR>q

function! ToggleRecording()
    let g:isRecording = !g:isRecording
    echo "is recording " . g:isRecording
endfunction

La idea es que el "modo de grabación" se cambie exclusivamente cuando presione q en el modo normal.

En base a eso, crea una variable g:isRecording que se alternará cada vez que inicie o detenga una grabación. De esta manera, cuando comience a grabar, g:isRecording se establecerá en 1 y en 0 cuando deje de grabar. A continuación, puede acceder al estado de grabación a través del valor de la variable.

El "inconveniente" es que para evitar el mapeo recursivo, tendrás que usar Shit-q para iniciar y detener la grabación en lugar de q . (Tenga en cuenta que no es un problema tan grande: he estado usando shift-q para alternar el modo de grabación durante algún tiempo porque no me gusta el comportamiento original de shift-q )

El principal problema de esta solución es que si lo olvidó y usa q, la variable no se alternará pero no podrá deshabilitar q (por ejemplo, con nnoremap q <nop> ) porque si hace el shift-q no lo hará ' trabajar más.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım