Come ripetere una mappatura tenendo premuto il tasto


11

Ho .vimrcalcune mie semplici mappature per ridimensionare facilmente le finestre divise:

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

Funziona abbastanza bene, ma per esempio, quando voglio ridimensionare la finestra di 10 righe, devo premere e rilasciare Leader+ UP10 volte.

Come posso ripetere questa mappatura mentre sono premuti i tasti? Quello che voglio è quando premo Leader+ UPla mappatura verrà applicata una volta, quindi dopo una breve durata verrà nuovamente applicata e così via mentre tengo premuti i tasti.

Nota: so che è possibile aggiungere il prefisso <C-w>+a un conteggio e potrei codificarlo nella mappatura o semplicemente inserire un conteggio prima di utilizzare la mappatura, ma non è così che voglio farlo.

Nota 2: So anche che è necessario utilizzare una mappatura popolare per ridimensionare le finestre +e i -tasti che sono più facili da premere più volte ma non voglio usare quei tasti per farlo.

Risposte:


14

Potresti provare a inserire una ... sottomodalità Vim ! Per il tuo caso, qualcosa del genere:

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>+')

Ciò significa che inserisci la sottomodalità con Leader-Upo Leader-Down(che aumenterà / ridurrà una volta la finestra) e quindi - dovrai solo premere Upo Downper ingrandire / ridurre la finestra, fino a quando non esci dalla sottomodalità.

Vedi anche l'aiuto, per problemi di timeout, ma per disabilitarlo:

"disable submode timeouts:
let g:submode_timeout = 0

... il che significa che rimarrai in quella sottomodalità indefinitamente, fino a quando premi un tasto diverso da Upo Down, o fino a quando non premi Esc.

Aaand, il prossimo consiglio utile che consiglierei:

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

... che consente di passare direttamente ai comandi successivi, quando si preme un tasto diverso. Ad esempio, premendo :si uscirà dalla sottomodalità e si aprirà la riga di comando.


Ho provato la tua soluzione ma non sembra funzionare: quando premo <kbd> Leader </kbd> + <kbd> SU </kbd> ho il messaggio --submode: grow/shrink --e la finestra viene ridimensionata di una riga ma il comando non è ' t ripetuto. L'ho provato con le 4 combinazioni di g:submode_keep_leaving_keye g:submode_timeouta 0 o 1. Non sono sicuro di aver fatto qualcosa di sbagliato o no. Di solito sto usando VIM in un terminale, ma per ora posso solo provare con gVim su Windows, ma non sono sicuro che cambi qualcosa.
statox

2
Il comando non si ripete automaticamente, devi comunque colpire Upo Downte stesso quante volte è necessario (ma senza dover Leaderprima premere )
VanLaser,

Oh, ora capisco meglio il codice! Funziona perfettamente grazie!
statox

2
Risposta perfetta e plugin fantastico! (Nota: devi installare il plug -in vim-submode prima di aggiungere i comandi sopra al tuo ~/.vimrc.)
weibeld

1

Con winresizer , ha colpito Ctrl- ee ridimensionare via!

Utilizzerai i normali tasti hjkl (e forse i tasti freccia).

Puoi "accettare" il ridimensionamento o "interromperlo".

C'è anche una modalità di spostamento in cui si scambiano le finestre e una modalità di messa a fuoco in cui si cambia la finestra in cui si è attivi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.