为了处理拆分,我使用了实际上非常方便的submode-plugin:它允许您创建新的模式(如正常模式,可视模式,插入模式等的“模式”),在其中定义新的键绑定。
这样一来,您就不必再使用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可以做很多强大的事情,有关更多详细信息,请参见文档。
编辑此处介绍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>
wincmd
例如,您可以映射::nmap wj :wincmd j<cr>
它的行为与CTRL-W j
(移至下面的窗口)相同。:help wincmd