我想在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-terminal
和xterm
中对此进行了测试,结果相同。有没有办法检测CTRL + Enter
?
答案 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