如何在zsh中绑定CTRL + Enter?

时间:2017-04-15 16:22:14

标签: zsh gnome-terminal

我想在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

1 个答案:

答案 0 :(得分: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,根据您的问题)。

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

以这种方式启动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 + 输入绑定到尚未被其他组合约束的序列(我们选择 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