【问题标题】:How to bind CTRL + Enter in zsh?如何在zsh中绑定CTRL + Enter?
【发布时间】:2017-09-11 16:59:26
【问题描述】:

我要在zsh中绑定Ctrl+输入↵

bindkey '^M' autosuggest-execute

但似乎终端为除 Alt 之外的任何修饰键发送相同的转义序列。

$ showkey -a

Press any keys - Ctrl-D will terminate this program

^M       13 0015 0x0d # Enter
^M       13 0015 0x0d # CTRL  + Enter
^M       13 0015 0x0d # SHIFT + Enter
^[^M     27 0033 0x1b # ALT   + Enter
         13 0015 0x0d

我不确定问题是否特定于 gnome-terminal。我还在mate-terminalxterm 中对此进行了测试,结果是一样的。有什么方法可以检测到CTRL + Enter

【问题讨论】:

标签: zsh gnome-terminal


【解决方案1】:

这里是 xterm、gnome-terminal 和任何其他 XWindow 系统终端仿真器的解决方案。

请注意,将 Ctrl + Enter 映射到特定的 shell 命令可以通过 xterm 以特定方式完成,不会影响在相同的 X 服务器。使用 gnome-terminal,有一个更通用的解决方案,但它会同时应用于 XWindow 服务器上的每个终端仿真器,而不仅仅是 gnome-terminal。因此,根据您的需要,您必须选择这两种解决方案之一。

首先,这是特别适合 xterm 的解决方案:

让我们将 Ctrl + Enter 绑定到尚未被其他组合绑定的序列:使用 xterm,这可以通过指定一些 X 资源来填充翻译来完成桌子。例如,绑定到 Esc + M。然后,在 zsh 中使用 bindkey 将此特定序列绑定到您的 ZLE 函数(autosuggest-execute 根据您的问题)。

要尝试,只需按照以下步骤操作:

1- 以这种方式启动 xterm:

% xterm -xrm '*.VT100.translations: #override Ctrl <Key>Return: string(0x1b) string("M")'

注意:我们使用了Return,但这是Enter,我们将以这种方式映射。

2- 在新的 xterm 窗口中,使用 bindkey:

% bindkey '^[M' autosuggest-execute

3- 现在输入 CTRL-Enter 来运行 autosuggest-execute

这是更通用的解决方案,几乎适用于所有终端模拟器

和上面一样,让我们​​将 Ctrl + Enter 绑定到尚未被其他组合绑定的序列(我们选择 Esc + M 这里)。使用Compose (5) X11 机制:添加一个文件 $HOME/.XCompose,其中包含多键输入序列 Ctrl + M 的特定映射。然后,在 zsh 中使用 bindkey 将此特定序列绑定到您的 ZLE 函数(autosuggest-execute 根据您的问题)。

要尝试,只需按照以下步骤操作:

1- 创建一个名为 $HOME/.XCompose 的新文件

在此文件中添加以下内容:

include "%L"
! Ctrl <Return> : "\033M"

注意 1:我们使用了Return,但这是Enter,我们将以这种方式映射。

注意 2:! 不是注释标记,重要的是保留在该行的开头。

注意 3:第一行 (include...) 用于保持其他快捷方式正常工作(例如 ^ + e 映射到 ê)。

2- 现在,你可以启动 gnome-terminal

3- 在新的 gnome-terminal 窗口中,使用 bindkey:

% bindkey '^[M' autosuggest-execute

4- 现在输入 CTRL-Enter 来运行 autosuggest-execute

【讨论】:

  • xterm 解决方案有效,但我无法让它与 gnome-terminal 一起使用。似乎没有加载~/.XCompose 文件。我试过export GTK_IM_MODULE=xim,但还是没有运气
  • 通用解决方案对我不起作用。运行 im-config 时出现错误 GTK+ supports to output one char only: "\033M": ! Ctrl &lt;Return&gt; : "\033M"
猜你喜欢
  • 1970-01-01
  • 2016-12-19
  • 1970-01-01
  • 1970-01-01
  • 2019-04-05
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多