Благодаря this answer на сайте SE посвященного Vim, я подошел к другой альтернативе, которая использует плагин для создания подрежима, посвященный управлению окон. Это означает, что с помощью комбинации клавиш я вхожу в новый режим, в котором некоторые клавиши позволят мне делать разные действия в окнах.
После установки vim-submode давайте добавим несколько строк в наш vimrc
настроить новый режим:
" Create a submode to handle windows
" The submode is entered whith <Leader>k and exited with <Leader>
call submode#enter_with('WindowsMode', 'n', '', '<Leader>k', ':echo "windows mode"<CR>')
call submode#leave_with('WindowsMode', 'n', '', '<Leader>')
Теперь вам нужно просто нажать Лидер + к, чтобы войти в новый режим (Вы можете изменить это с линией submode#enter_with
) и нажмите Лидер, чтобы выйти из него.
" Change of windows with hjkl
call submode#map('WindowsMode', 'n', '', 'j', '<C-w>j')
call submode#map('WindowsMode', 'n', '', 'k', '<C-w>k')
call submode#map('WindowsMode', 'n', '', 'h', '<C-w>h')
call submode#map('WindowsMode', 'n', '', 'l', '<C-w>l')
С этими линиями, после того, как вы вошли в новом режиме (с Лидером + к) вы будете иметь возможность перемещаться между вашими окнами с ключами hjkl
, как если бы вы использовали <c-w>hjlk
в нормальный режим.
" Resize windows with <C-yuio> (interesting on azerty keyboards)
call submode#map('WindowsMode', 'n', '', 'u', '<C-w>-')
call submode#map('WindowsMode', 'n', '', 'i', '<C-w>+')
call submode#map('WindowsMode', 'n', '', 'y', '<C-w><')
call submode#map('WindowsMode', 'n', '', 'o', '<C-w>>')
Некоторые еще несколько строк, чтобы изменение размеров окна с yuio
(я выбираю эти ключи, потому что на Azerty клавиатуре они только на строке над hjkl
и довольно удобны в использовании, может быть, это было бы более полезно изменить это на клавиатуре qwerty, Im не уверен).
" Move windows with <C-hjkl>
call submode#map('WindowsMode', 'n', '', '<C-j>', '<C-w>J')
call submode#map('WindowsMode', 'n', '', '<C-k>', '<C-w>K')
call submode#map('WindowsMode', 'n', '', '<C-h>', '<C-w>H')
call submode#map('WindowsMode', 'n', '', '<C-l>', '<C-w>L')
Давайте переместим окна с <C-hjkl>
.
" close a window with q
call submode#map('WindowsMode', 'n', '', 'q', '<C-w>c')
" split windows with/and !
call submode#map('WindowsMode', 'n', '', '/', '<C-w>s')
call submode#map('WindowsMode', 'n', '', '!', '<C-w>v')
И еще несколько отображений, чтобы закрыть окно и создать новые расщепления.
let g:submode_keep_leaving_key = 1
let g:submode_timeout = 0
Наконец, эти опции позволяют удерживать клавишу нажатой, и она повторит свое действие.
Примечание Я знаю, что этот ответ описывает больше, чем просто перемещение между окнами по мере того, как спрашивал ОП.Я думаю, что создание подкатегории довольно удобно, но это только интерес, если подкод позволяет делать не только одно действие.
Спасибо. Я знаю об этом решении, но я искал что-то, что позволило бы перейти к определенному окну. В любом случае это должно быть выполнимым решением в случае отсутствия альтернатив. – Adas
@Adas - Нет лучшего способа, но я не знаю. Дело в том, что вы не перемещаетесь по окнам (они просто ... точки обзора). Вы перемещаетесь по буферам. Поэтому, если у вас есть конфигурация окна 2x2, верхний левый не обязательно будет первым, верхним справа вторым и т. Д. – Rook
У меня есть 'nnoremap w', так как я никогда не использую ключ возврата в нормальном режиме. Тогда без усилий можно пройти через расщепления. –