如何在zsh中绑定CTRL + Enter?

And*_*hko 6 zsh gnome-terminal

我想在zsh中绑定Ctrl+ Enter ?

bindkey '^M' autosuggest-execute
Run Code Online (Sandbox Code Playgroud)

但是似乎终端为以外的任何修饰键发送了相同的转义序列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
Run Code Online (Sandbox Code Playgroud)

我不确定该问题是否特定于gnome-terminal。我也测试了在mate-terminalxterm,结果是一样的。有什么办法可以检测CTRL + Enter

Ale*_*nyo 5

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

注意映射Ctrl+Enter可以使用 xterm 以特定方式到特定的 shell 命令,该方式不会影响在同一 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")'
Run Code Online (Sandbox Code Playgroud)

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

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

% bindkey '^[M' autosuggest-execute
Run Code Online (Sandbox Code Playgroud)

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"
Run Code Online (Sandbox Code Playgroud)

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

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

注意 3:第一行 ( include...) 在这里是为了保持其他快捷方式的工作(例如 ^ + e 映射到 ê)。

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

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

% bindkey '^[M' autosuggest-execute
Run Code Online (Sandbox Code Playgroud)

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