终端能否检测到<shift-enter>或<control-enter>?</control-enter> </shift-enter>

时间:2009-02-28 14:57:25

标签: vim console terminal

终端是否可以检测⇧Shift + Enter↵ Ctrl + Enter↵按键?

我正在尝试配置vim来执行使用这些序列的键映射,虽然它们在gvim中运行良好,但它们似乎不适用于任何终端控制台。

奇怪的是,虽然在vim中未检测到 Ctrl + Enter↵,但将Enter↵映射到 Esc 正确映射,但是然后按 Ctrl + Enter↵的行为类似于Enter↵

2 个答案:

答案 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。