Как повторить отображение при нажатой клавише

11

У меня есть .vimrcнесколько простых сопоставлений для изменения размера разделенных окон:

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

Это работает довольно хорошо, но, например, когда я хочу изменить размер окна из 10 строк, я должен нажать и отпустить Leader+ UP10 раз.

Как я могу повторить это отображение, пока нажаты клавиши? Что я хочу, так это то, что когда я нажимаю Leader+, UPотображение будет применено один раз, затем через короткое время оно будет применено еще раз и так далее, пока я удерживаю клавиши.

Примечание: я знаю, что можно <C-w>+добавить префикс к счетчику, и я мог бы жестко закодировать его в отображении или просто ввести счетчик перед использованием отображения, но я не хочу этого делать.

Примечание 2: Я также знаю , что популярное отображение , чтобы изменить размер окна, чтобы использовать +и -ключи , которые легче нажимать несколько раз , но я не хочу использовать эти ключи , чтобы сделать это ни.

statox
источник

Ответы:

14

Вы можете попробовать войти в ... подрежим Vim ! Для вашего случая примерно так:

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

Это означает, что вы вводите подрежим с помощью Leader-Upили Leader-Down(который также будет увеличивать / уменьшать окно один раз), а затем - вам нужно будет только нажимать Upили Downувеличивать / уменьшать окно, пока вы не выйдете из подрежима.

См. Также справку по вопросам тайм-аута, но чтобы отключить его:

"disable submode timeouts:
let g:submode_timeout = 0

... что означает, что вы будете оставаться в этом подрежиме неопределенно долго, пока не нажмете клавишу, отличную от Upили Down, или пока не нажмете Esc.

Ааа, следующий полезный совет, который я бы порекомендовал:

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

... который позволяет вам перейти непосредственно к вашим следующим командам при нажатии другой клавиши. Например, нажатие :приведет к выходу из подрежима и открытию командной строки.

VanLaser
источник
Я попробовал ваше решение, но, похоже, оно не работает: когда я нажимаю <kbd> Leader </ kbd> + <kbd> UP </ kbd>, у меня появляется сообщение, --submode: grow/shrink --и размер окна изменяется на одну строку, но команда is ' т повторил. Я попробовал это с 4 комбинациями g:submode_keep_leaving_keyи g:submode_timeout0 или 1. Я не уверен, что сделал что-то не так или нет. Я обычно использую vim в терминале, но сейчас я могу тестировать только с gVim на Windows, но я не уверен, что это что-то изменит.
statox
2
Команда не повторяется автоматически, вы все равно должны ударить Upили Downсебя столько раз, сколько необходимо (но без необходимости Leaderсначала нажимать )
VanLaser
О, теперь я понимаю код лучше! Работает отлично, спасибо!
statox
2
Идеальный ответ и удивительный плагин! (Примечание: вы должны установить плагин vim-submode, прежде чем добавлять вышеупомянутые команды к себе ~/.vimrc.)
weibeld
1

С winresizer нажмите Ctrl- eи измените размер!

Вы будете использовать обычные клавиши hjkl (и, возможно, клавиши со стрелками).

Вы можете «принять» изменение размера или «отменить» его.

Есть также режим перемещения, в котором вы меняете окна, и режим фокусировки, когда вы переключаете окно, в котором вы активны.

Д. Бен Кнобл
источник