Як я можу працювати з розщепленнями у Vim без Ctrl-W?


24

Мій термінал не дозволяє мені вводити Ctrl+ W, оскільки це ярлик для закриття вкладки терміналу.

Мені подобається працювати з розколами, але я не можу знайти жодного способу зробити це без використання C-W. Це змусило мене використовувати вкладки, тому що я можу перемикатися між ними за допомогою gt, gTабо #gtде # - це число, але я вважаю це менш зручним, ніж розбиття, оскільки я можу бачити вміст одного файлу одночасно.

Я не можу використовувати mouse=aжодне, оскільки мій термінал не підтримує цього.

Як я можу працювати з розщепленнями у Vim без наявного Ctrl+ Wкомбо?


1
Використовуйте відображення для. wincmd Наприклад, ви можете зробити карту: :nmap wj :wincmd j<cr>вона діє так само, як CTRL-W j(перейти до вікна нижче). :help wincmd
Алекс Кролл

@AlexKroll Чому ви не опублікуєте це як відповідь? :-)
Мартін Турнойж

1
@Carpetsmoker Я думаю, що це не повне покриття цієї проблеми. CTRL-W jпрацює з лічильниками (перейдіть до n-го вікна нижче від поточного) моє рішення не робить.
Алекс Кролл

2
Я зазвичай не ціную такі поради, але я би шукав іншого терміналу. <C-W>занадто корисний ярлик (не тільки у багатьох місцях у Vim, але й у башті), щоб втратити. Мені буде цікаво, які ще ключові прив'язки споживаються терміналом - <C-T>? Принаймні, я б розглядав, чи можна налаштувати їх у терміналі.
tommcdo

Відповіді:


23

Можна просто перезавантажити <C-w>іншу комбінацію, наприклад:

:nnoremap <C-e> <C-w>

Тепер ви можете використовувати, <C-e>і це буде діяти так, ніби ви натиснули <C-w>.

Це замінить <C-e>відображення за замовчуванням відображення (прокрутка вниз). Vim вже використовує кожну клавішу на клавіатурі, і єдиний спосіб запобігти цьому - це використання клавіші лідера, яка діє як "префікс":

:nnoremap <Leader>w <C-w>

Якщо ви не перезавантажилися <Leader>, тепер ви можете користуватися \w(один за одним). Насправді я віддаю перевагу цьому, оскільки мені не подобаються комбінації клавіш CTRL +.

Дивіться, що таке <Leader>? і як я можу дізнатися, для чого встановлено <Leader>? І чи можна зробити перезапис <Leader>? .


Вирішує мою проблему. Додав карту до мого vimrc і трохи перевірив без проблем.
Mateon1

13

Я фактично використовую :wincmdчастіше Ctrl+, Wтому що мені легше набрати скорочений :winc.

Наприклад, еквівалент Ctrl+ W Lє :winc l.


7

Я встановив такі ремейки у своєму .vimrc:

nmap <C-h> <C-w>h
nmap <C-j> <C-w>j
nmap <C-k> <C-w>k
nmap <C-l> <C-w>l

Тепер я можу використовувати Ctrl+hдля переходу до лівого вікна, Ctrl+lдля переміщення до правого вікна тощо. Це, здається, логічно вписується у звичайну навігацію Vim.


4
Зауважте, що зіставлення Ctrl + h у терміналі не завжди працює, оскільки це часто клавіша зворотної області. Дивіться цю відповідь і це питання .
Martin Tournoij

Також ви можете використовувати nnoremap <cr> <c-w>w, оскільки клавіша повернення в звичайному режимі використовується мало. Тоді без особливих зусиль проїхати по розколи.
Надія

5

Для роботи з розщепленнями я використовую плагін submode, що насправді досить зручно: він дозволяє створити новий режим ("режим", як у звичайному режимі, візуальний режим, режим вставлення тощо), де ви визначаєте нові прив'язки клавіш. .

З цим вам більше не доведеться користуватися, Ctrl+wі коли ви перебуваєте в новому режимі, всі клавіші вільні для зв’язування: більше проблем, таких як "Чорт, я не можу знайти комбінацію клавіш, яка є означенням і ще не відображена на карті "

Ви можете встановити плагін з будь-яким звичайним менеджером плагінів, і ось деякі мої конфігурації, щоб дати вам натхнення:


Я створив новий режим, який я викликав, WindowsModeв якому маніпулюю своїми розбиттями:

call submode#enter_with('WindowsMode', 'n', '', '<Leader>k', ':echo "windows mode"<CR>')
call submode#leave_with('WindowsMode', 'n', '', '<Leader>')

Ці рядки означають, що я входжу в режим з Leaderkі виходжу з режиму за допомогою Leader: Після натискання Leaderkвсіх клавіш, на які я натискаю, буде:

  • Не робіть нічого, якщо я б не визначив відображення для них у цьому режимі
  • Робіть те, що я вирішив відобразити їх у цьому режимі (див. Решту відповіді)
  • Поверніться до нормального режиму, якщо я натиснув Leader

Після того, як я в WindowsModeцих рядках змушую hjklпереходити по поділуCtrl+whjkl

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

Я використовував ці рядки, щоб розділити вікна /та !:

" split windows with / and !
call submode#map('WindowsMode', 'n', '', '/', '<C-w>s')
call submode#map('WindowsMode', 'n', '', '!', '<C-w>v')

І qзакрийте розкол:

call submode#map('WindowsMode', 'n', '', 'q', '<C-w>c')

Перемістіть розщеплення за допомогою Ctrlhjkl:

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

Vim-submode дозволяє робити багато потужних речей, докладніші відомості див. У документі .


EDIT Інший підхід підмоду Window описаний тут . Я думаю, що метод, який використовує автор, ще ближче до відповіді на питання: Тут використовується для створення нового режиму, але всі <c-w>somethingвідображення доступні з тими ж ключами в підмоду:

" Go through every letter
for key in ['a','b','c','d','e','f','g','h','i','j','k','l','m',
\           'n','o','p','q','r','s','t','u','v','w','x','y','z']
  " maps lowercase, uppercase and <C-key>
  call submode#map('window', 'n', '', key, '<C-w>' . key)
  call submode#map('window', 'n', '', toupper(key), '<C-w>' . toupper(key))
  call submode#map('window', 'n', '', '<C-' . key . '>', '<C-w>' . '<C-'.key . '>')
endfor

" Go through symbols. Sadly, '|', not supported in submode plugin.
for key in ['=','_','+','-','<','>']
  call submode#map('window', 'n', '', key, '<C-w>' . key)
endfor

Таким чином , все відображення <c-w>lowerCaseKey, <c-w>upperCaseKey, <c-w><c-Key>і відображення <c-w>=_+-<>всі вони доступні у віконному режимі без префікса<c-w>

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.