【问题标题】:mapping keypad keys in vim do not respond to control keyvim中的映射键盘键不响应控制键
【发布时间】:2012-06-07 12:48:23
【问题描述】:

我正在使用以下映射来管理窗口大小:

: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

&lt;C-kMultiply&gt; 的作用与&lt;kMultiply&gt; 相同

知道为什么吗?

【问题讨论】:

  • 因为没有&lt;C-kDivide&gt;这样的控制字符?
  • 好点。没想到;-(另一方面,为什么没有这样的组合?
  • 试图将 control-'keypad x' 绑定到 XUbuntu 中的应用程序。这行得通,所以控制字符 确实存在。
  • 有时在将控制键视为独立的“修饰符”键时可能会捕获它。但是在谈论终端时,&lt;C-A&gt; 之类的东西作为字符 ^A 发送,并且可能不知道任何适合 &lt;C-kMultiply&gt; 的字符......
  • 这是输入流的内部表示的问题(如果您使用的是 gvim),它无法处理大部分 &lt;C- 组合,因为它只能表示大约 ASCII 控制代码。如果你使用 vim 控制在到达 vim 之前就被砍掉了,所以 vim 能不能处理它并不重要。

标签: vim keymapping


【解决方案1】:

扩展 ZyX 所说的话:

&lt;C-kMultiply&gt; 这样的键在 GVim 中可以正常工作,它接收来自 GUI 环境的键盘输入,但由于控制字符在它:

How control characters map to keyboards(维基百科)

控制修饰符通过简单地将两个高位归零来工作,例如 G (​10​00111) 变为 BEL (​00​00111)。这意味着它只能用于单字节字符代码:无法将其应用于多字节转义序列,例如 &lt;kMultiply&gt; 实际发送的内容。

(这也是为什么您通常不能在终端中将 CtrlShift 结合使用:&lt;C-G&gt;&lt;C-g&gt; 最终都作为同一个控件高位清零后的字符。)

面对这种无法表示的组合键会发生什么因终端而异:例如,xterm 将忽略修饰符并将&lt;C-kMultiply&gt; 作为&lt;kMultiply&gt; 发送,而gnome-terminal 将拒绝发送完全按下键。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 2012-12-09
    • 1970-01-01
    • 1970-01-01
    • 2016-04-21
    相关资源
    最近更新 更多