Jak powtórzyć mapowanie przy wciśniętym klawiszu

11

Mam w moich .vimrcprostych mapowaniach, aby łatwo zmienić rozmiar podzielonych okien:

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

Działa to całkiem dobrze, ale na przykład, gdy chcę zmienić rozmiar okna 10 linii, muszę nacisnąć i zwolnić Leader+ UP10 razy.

Jak mogę powtórzyć to mapowanie, gdy klawisze są wciśnięte? Chcę po naciśnięciu Leader+ UPmapowanie zostanie zastosowane raz, a po krótkim czasie zostanie zastosowane jeszcze raz i tak dalej, trzymając klawisze.

Uwaga: Wiem, że możliwe jest prefiks <C-w>+z liczbą i mogłem zakodować go na stałe w mapowaniu lub po prostu wprowadzić liczbę przed użyciem mapowania, ale nie tak chcę to zrobić.

Uwaga 2: Wiem też, że popularny mapowanie do zmiany rozmiaru okna jest użycie +i -klawisze, które są łatwiejsze w prasie kilka razy ale nie chcą korzystać z tych kluczy do zrobienia, że nie.

statox
źródło

Odpowiedzi:

14

Możesz spróbować wpisać ... podtryb Vima ! W twoim przypadku coś takiego:

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

Oznacza to, że podchodzisz do trybu podrzędnego za pomocą Leader-Uplub Leader-Down(który raz powiększy / zmniejszy okno), a następnie - będziesz musiał tylko nacisnąć Uplub, Downaby powiększyć / zmniejszyć okno, dopóki nie wyjdziesz z podtrybu.

Zobacz także pomoc dotyczącą problemów z przekroczeniem limitu czasu, ale aby ją wyłączyć:

"disable submode timeouts:
let g:submode_timeout = 0

... co oznacza, że ​​pozostaniesz w tym podtrybu na czas nieokreślony, dopóki nie naciśniesz klawisza innego niż Uplub Down, lub dopóki nie naciśniesz Esc.

Aaand, kolejna przydatna wskazówka, którą poleciłbym:

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

... co pozwala przejść bezpośrednio do następnych poleceń po naciśnięciu innego klawisza. Na przykład naciśnięcie :spowoduje zarówno opuszczenie submodułu, jak i otwarcie wiersza poleceń.

VanLaser
źródło
Próbowałem rozwiązania, ale wydaje się, że to nie działa: kiedy nacisnę <kbd> Leader </kbd> + <kbd> UP </kbd>, mam komunikat, --submode: grow/shrink --a rozmiar okna zmienia się o jedną linię, ale polecenie nie jest powtórzone. Próbowałem z 4 kombinacjami g:submode_keep_leaving_keyi g:submode_timeoutdo 0 lub 1. Nie jestem pewien, czy zrobiłem coś złego, czy nie. Zwykle używam vima w terminalu, ale na razie mogę testować tylko z gVim na Windowsie, ale nie jestem pewien, czy coś to zmieni.
statox
2
Polecenie nie jest powtarzane automatycznie, wciąż musisz uderzyć Uplub Downsam tyle razy, ile potrzeba (ale bez uprzedniego naciśnięcia Leader)
VanLaser
Och, rozumiem teraz kod lepiej! Działa idealnie dzięki!
statox
2
Idealna odpowiedź i niesamowita wtyczka! (Uwaga: musisz zainstalować wtyczkę vim-submode przed dodaniem powyższych poleceń do swojego ~/.vimrc.)
weibeld
1

Z Winresizer , uderz Ctrl- ei zmień rozmiar!

Użyjesz zwykłych klawiszy hjkl (i być może klawiszy strzałek).

Możesz „zaakceptować” zmianę rozmiaru lub „przerwać”.

Istnieje również tryb przenoszenia, w którym zamieniasz okna, oraz tryb ostrości, w którym przełączasz okno, w którym jesteś aktywny.

D. Ben Knoble
źródło