【问题标题】:Can terminals detect <Shift-Enter> or <Control-Enter>?终端可以检测到 <Shift-Enter> 或 <Control-Enter> 吗?
【发布时间】:2010-10-10 12:46:24
【问题描述】:

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

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

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

【问题讨论】:

  • 你在终端使用vim还是vi?

标签: vim console terminal


【解决方案1】:

当按下&lt;C-Enter&gt; 时,某些终端会发送&lt;NL&gt;。这相当于发送&lt;C-J&gt;

要了解您的终端对 &lt;Shift-Enter&gt;&lt;Ctrl-Enter&gt;&lt;Enter&gt; 的作用,请转到您的终端,输入 &lt;Ctrl-V&gt;(类似于 sykora 对 vim 的建议),然后输入您感兴趣的序列在。

使用 gnome-terminal,我得到以下信息:

  <Enter> : ^M
<S-Enter> : ^M
<C-Enter> : <NL>

查看man ascii 表示^M 给出了&lt;CR&gt; 序列。

答案是取决于终端,有一个简单的方法来检查。

【讨论】:

  • 我在 Ubuntu 上的 gnome 终端 sens imap &lt;C-J&gt; 捕捉到了它。谢谢!
  • 我也在使用 gnome-terminal,但我得到了不同的结果:&lt;Enter&gt; : ^M&lt;S-Enter&gt; : ^M&lt;C-Enter&gt; : ^M。有没有办法解决这个问题?
  • @AndrijaČehko 我在基于 gnome-terminal 的终结者中得到了与您相同的结果。您仍然可以在 vim 中将 ^M 映射(在插入模式下按 Ctrl-V + Enter 插入该字符)到您想要的任何命令,然后按 Enter 访问它(无论是否按住 shift 或 control)。在这种情况下,我认为没有办法从 Enter、Shift-Enter 和 Ctrl-Enter 获得单独的功能。
【解决方案2】:

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 上使用 C-Q 而不是 C-V。

【讨论】:

  • 似乎在终端中实际上生成了不同的代码: gvim: 产生 ^M vim: 产生 ^M gvim: 产生 vim: 产生 ^@ 但是,我似乎无法正确映射 ^@,使用时:map ^@ 命令
  • 查看 vim :help :NL-used-for-Nul 了解为什么我得到了我所做的结果。
猜你喜欢
  • 1970-01-01
  • 2015-05-24
  • 2020-02-26
  • 2022-01-14
  • 1970-01-01
  • 2017-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多