终端是否可以检测⇧Shift + Enter↵或 Ctrl + Enter↵按键?
我正在尝试配置vim来执行使用这些序列的键映射,虽然它们在gvim中运行良好,但它们似乎不适用于任何终端控制台。
奇怪的是,虽然在vim中未检测到 Ctrl + Enter↵,但将Enter↵映射到 Esc 正确映射,但是然后按 Ctrl + Enter↵的行为类似于Enter↵!
答案 0 :(得分:34)
有些终端在按下<NL>
时发送<C-Enter>
。这相当于发送<C-J>
。
要了解您的终端对<Shift-Enter>
,<Ctrl-Enter>
和<Enter>
的影响,请转到您的终端,输入<Ctrl-V>
(类似于sykora对vim的建议),以及输入您感兴趣的序列。
使用gnome-terminal,我得到以下内容:
<Enter> : ^M
<S-Enter> : ^M
<C-Enter> : <NL>
查看man ascii
表示^M
提供<CR>
序列。
答案是它取决于终端,并且有一种简单的方法可以检查。
答案 1 :(得分:17)
Gvim运行自己的键击处理管理器,因此可以获取所有各种键组合。 Vim依赖于传递特定按键的特定终端,因此密钥处理与终端一样好或多变。
您可以通过密钥找出插入的内容,找出可以执行的操作的一种方法。例如:键入:
:<C-V><C-Enter>
即在键入Control-V组合后实际键入要按的组合。在那之后为enter做同样的事情,即
:<C-V><Enter>
如果它们产生相同的代码,则终端将两个键组合解释为相同的键码,并且您不能在不弄乱终端的情况下绑定它们。
在我的终端(urxvt)中,Control-Enter,Shift-Enter和Enter(单独)都产生^ M字符,这意味着我不能映射一个而不映射另一个。 Control-Tab和Control-I以及Control-Space和Control - @
也是如此编辑:使用C-Q而不是C-V for Windows。