如何在 zsh 中绑定 CTRL + Enter?
How to bind CTRL + Enter in zsh?
我要绑定Ctrl+在zsh中输入↵:
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
?
这是 xterm、gnome-terminal 和 XWindow 系统的任何其他终端仿真器的解决方案。
请注意,映射 Ctrl + Enter 到特定的 shell 命令可以用 xterm 专门完成,在特定的对同一 X 服务器上的其他终端仿真器 运行ning 没有影响的方式。对于 gnome-terminal,有一个更通用的解决方案,但它会同时应用于 XWindow 服务器上的每个终端仿真器,而不仅仅是 gnome-terminal。因此,根据您的需要,您必须选择这两种解决方案中的一种。
首先,这里是专门针对xterm的解决方案:
让我们将 Ctrl + Enter 绑定到一个尚未被其他组合绑定的序列:使用 xterm,这可以通过指定一些 X 资源来填充翻译 table。例如,绑定到 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 window 中,使用 bindkey:
% bindkey '^[M' autosuggest-execute
3- 现在键入 CTRL-Enter 以 运行 autosuggest-execute
这是更通用的解决方案,适用于几乎所有终端仿真器:
像上面一样,让我们将Ctrl + Enter绑定到一个尚未被其他组合绑定的序列(我们选择Esc + M 这里)。使用Compose (5)
X11机制:添加一个文件$HOME/.XCompose,包含多键输入序列Ctrl + M[=77的特定映射=].然后,在 zsh 中使用 bindkey 将此特定序列绑定到您的 ZLE 函数(autosuggest-execute
根据您的问题)。
要尝试,只需按照以下步骤操作:
1- 创建一个名为 $HOME/.XCompose 的新文件
在此文件中添加以下内容:
include "%L"
! Ctrl <Return> : "3M"
注1:我们已经使用了Return
,但这是Enter
我们将这样映射。
注2:!
不是注释标记,重要的是放在这一行的开头。
注意 3:第一行 (include...
) 是为了让其他快捷方式起作用(例如 ^ + e 映射到 ê)。
2- 现在,您可以启动 gnome-terminal
3- 在新的 gnome 终端 window 中,使用绑定密钥:
% bindkey '^[M' autosuggest-execute
4- 现在键入 CTRL-Enter 以 运行 autosuggest-execute
我要绑定Ctrl+在zsh中输入↵:
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
?
这是 xterm、gnome-terminal 和 XWindow 系统的任何其他终端仿真器的解决方案。
请注意,映射 Ctrl + Enter 到特定的 shell 命令可以用 xterm 专门完成,在特定的对同一 X 服务器上的其他终端仿真器 运行ning 没有影响的方式。对于 gnome-terminal,有一个更通用的解决方案,但它会同时应用于 XWindow 服务器上的每个终端仿真器,而不仅仅是 gnome-terminal。因此,根据您的需要,您必须选择这两种解决方案中的一种。
首先,这里是专门针对xterm的解决方案:
让我们将 Ctrl + Enter 绑定到一个尚未被其他组合绑定的序列:使用 xterm,这可以通过指定一些 X 资源来填充翻译 table。例如,绑定到 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 window 中,使用 bindkey:
% bindkey '^[M' autosuggest-execute
3- 现在键入 CTRL-Enter 以 运行 autosuggest-execute
这是更通用的解决方案,适用于几乎所有终端仿真器:
像上面一样,让我们将Ctrl + Enter绑定到一个尚未被其他组合绑定的序列(我们选择Esc + M 这里)。使用Compose (5)
X11机制:添加一个文件$HOME/.XCompose,包含多键输入序列Ctrl + M[=77的特定映射=].然后,在 zsh 中使用 bindkey 将此特定序列绑定到您的 ZLE 函数(autosuggest-execute
根据您的问题)。
要尝试,只需按照以下步骤操作:
1- 创建一个名为 $HOME/.XCompose 的新文件
在此文件中添加以下内容:
include "%L"
! Ctrl <Return> : "3M"
注1:我们已经使用了Return
,但这是Enter
我们将这样映射。
注2:!
不是注释标记,重要的是放在这一行的开头。
注意 3:第一行 (include...
) 是为了让其他快捷方式起作用(例如 ^ + e 映射到 ê)。
2- 现在,您可以启动 gnome-terminal
3- 在新的 gnome 终端 window 中,使用绑定密钥:
% bindkey '^[M' autosuggest-execute
4- 现在键入 CTRL-Enter 以 运行 autosuggest-execute