这里提供了适用于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 键以运行自动建议执行。
CTRL + Enter
视为<NL>
,而是视为^M
,这与Enter
和SHIFT + Enter
相同。 - Andrija Čehko