我使用以下映射来管理窗口大小:
:nnoremap <kPlus> <C-W>+
:nnoremap <kMinus> <C-W>-
:nnoremap <kDivide> <C-W><
:nnoremap <kMultiply> <C-W>>
将控件前缀添加到地图窗口跳转没有任何效果:
:nnoremap <C-kDivide> <C-W>h
:nnoremap <C-kMultiply> <C-W>l
按<C-kMultiply>
的作用与<kMultiply>
相同
知道为什么吗?
扩展ZyX所说的话:
像 <C-kMultiply>
这样的键在 GVim 中可以正常工作,它从 GUI 环境接收键盘输入,但由于在其中定义控制字符的古老方式,它们无法在用作终端 Vim 输入的流中表示:
控制字符如何映射到键盘(维基百科)
控制修饰符的工作原理是简单地将两个高位归零,例如 G (1000111) 变为 BEL
(0000111)。这意味着它只能使用单字节字符代码:无法将其应用于多字节转义序列,例如<kMultiply>
实际发送的内容。
(这也是为什么您通常不能在终端中将 Ctrl 与 Shift 结合使用的原因:一旦高位归零,<C-G>
和 <C-g>
最终都会成为相同的控制字符。
面对这种无法表示的组合键会发生什么因终端而异:例如,xterm
将忽略修饰符并发送<C-kMultiply>
作为<kMultiply>
,而gnome-terminal
将完全拒绝发送按键。