45

终端是否可以检测到⇧ Shift+Enter↵</kbd> or Ctrl+Enter↵</kbd> keypresses?

我正在尝试将 vim 配置为使用这些序列进行键映射,虽然它们在 gvim 中工作正常,但它们似乎在任何终端控制台中都不起作用。

奇怪的是,虽然Ctrl+Enter↵</kbd> is not detected in vim, mapping Enter↵</kbd> to Esc maps properly, but then pressing Ctrl+Enter↵</kbd> behaves like Enter↵</kbd>!

4

2 回答 2

42

某些终端在按下<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>顺序。

答案是它取决于终端,并且有一种简单的检查方法。

于 2009-02-28T18:09:15.597 回答
18

Gvim 运行自己的按键处理管理器,因此可以获取所有各种组合键。Vim 依赖于特定终端来传递特定的按键,因此按键处理仅与终端一样好或不同。

确定是否可以执行您想做的事情的一种方法是使用密钥找出插入的内容。例如类型:

:<C-V><C-Enter>

即在键入组合Control-V 后实际键入要按的组合。之后对输入做同样的事情,即

:<C-V><Enter>

如果它们产生相同的代码,那么终端会将两个键组合解释为相同的键码,并且您无法在不弄乱终端的情况下绑定它们。

在我的终端 (urxvt) 中,Control-Enter、Shift-Enter 和 Enter(单独)都会产生 ^M 字符,这意味着我无法映射一个而不映射另一个。Control-Tab 和 Control-I 以及 Control-Space 和 Control-@ 也是如此

编辑:在 Windows 上使用 CQ 而不是 CV。

于 2009-02-28T16:15:00.147 回答