Cómo repetir una asignación al mantener presionada la tecla

11

Tengo en mis .vimrcasignaciones simples para cambiar el tamaño de las ventanas divididas fácilmente:

noremap <Leader><UP>    <C-w>+
noremap <Leader><DOWN>  <C-w>-

Eso funciona bastante bien, pero por ejemplo, cuando quiero cambiar el tamaño de la ventana de 10 líneas, tengo que presionar y soltar Leader+ UP10 veces.

¿Cómo puedo repetir esta asignación mientras se presionan las teclas? Lo que quiero es que cuando presione Leader+, UPla asignación se aplicará una vez y luego, después de un corto período de tiempo, se aplicará una vez más y así sucesivamente mientras mantengo presionadas las teclas.

Nota: Sé que es posible hacer un prefijo <C-w>+con un conteo y podría codificarlo en el mapeo o simplemente ingresar un conteo antes de usar el mapeo, pero no es así como quiero hacerlo.

Nota 2: también sé que un mapeo popular para cambiar el tamaño de las ventanas es utilizar +y -llaves que son más fáciles de prensa varias veces, pero no quiero usar esas claves para hacer que ninguno.

statox
fuente

Respuestas:

14

Podrías intentar entrar en un ... Vim submode ! Para su caso, algo como esto:

call submode#enter_with('grow/shrink', 'n', '', '<leader><up>', '<C-w>+')
call submode#enter_with('grow/shrink', 'n', '', '<leader><down>', '<C-w>-')
call submode#map('grow/shrink', 'n', '', '<down>', '<C-w>-')
call submode#map('grow/shrink', 'n', '', '<up>', '<C-w>+')

Esto significa que ingresa al submodo con Leader-Upo Leader-Down(que también aumentará / reducirá la ventana una vez) y luego, solo tendrá que presionar Upo Downpara aumentar / reducir la ventana, hasta que salga del submodo.

Consulte también la ayuda, para problemas de tiempo de espera, pero, para deshabilitarla:

"disable submode timeouts:
let g:submode_timeout = 0

... lo que significa que permanecerá en ese submodo indefinidamente, hasta que presione una tecla que no sea Upo Down, o hasta que presione Esc.

Y, el siguiente consejo útil que recomendaría:

" don't consume submode-leaving key
let g:submode_keep_leaving_key = 1

... que le permite moverse directamente a sus siguientes comandos, al presionar una tecla diferente. Por ejemplo, presionar :dejará el submodo y abrirá la línea de comando.

VanLaser
fuente
Intenté su solución pero no parece funcionar: cuando presiono <kbd> Leader </kbd> + <kbd> UP </kbd> tengo el mensaje --submode: grow/shrink --y la ventana se redimensiona en una línea pero el comando no es ' t repetido. Lo probé con las 4 combinaciones de g:submode_keep_leaving_keyya g:submode_timeout0 o 1. No estoy seguro de si hice algo mal o no. Por lo general, estoy usando vim en una terminal, pero por ahora solo puedo probar con gVim en Windows, pero no estoy seguro de que cambie algo.
statox
2
El comando no es auto-repetida, todavía tiene que golpear Upo Downusted mismo tantas veces como sea necesario (pero sin tener que pulsar Leaderprimero)
VanLaser
¡Oh, ahora entiendo mejor el código! Funciona perfectamente gracias!
statox
2
¡Respuesta perfecta y complemento increíble! (Nota: debe instalar el complemento vim-submode antes de agregar los comandos anteriores a su ~/.vimrc.)
weibeld
1

Con winresizer , golpeado Ctrl- ey cambiar el tamaño de distancia!

Utilizará las teclas hjkl normales (y tal vez las teclas de flecha).

Puede "aceptar" el cambio de tamaño o "cancelarlo".

También hay un modo de movimiento donde intercambias ventanas y un modo de enfoque donde cambias la ventana en la que estás activo.

D. Ben Knoble
fuente