gpt4 book ai didi

zsh - 如何在zsh中绑定(bind)CTRL + Enter?

转载 作者:行者123 更新时间:2023-12-02 16:45:53 25 4
gpt4 key购买 nike

我想在zsh中绑定(bind)Ctrl+Enter ↵:

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 系统的任何其他终端仿真器的解决方案。

请注意,可以使用 xterm 专门将 Ctrl + Enter 映射到特定的 shell 命令,这种特定方式不会影响运行在该计算机上的其他终端仿真器。相同的 X 服务器。对于 gnome-terminal,有一个更通用的解决方案,但它将同时应用于 XWindow 服务器上的每个终端仿真器,而不仅仅是 gnome-terminal。因此,根据您的需求,您必须选择这两种解决方案之一。

首先,这是专门适合 xterm 的解决方案:

让我们将 Ctrl + Enter 绑定(bind)到尚未被其他组合绑定(bind)的序列:使用 xterm,可以通过指定一些 X 资源来填充翻译来完成此操作 table 。例如,绑定(bind)到 Esc + M。然后,使用 zsh 中的 bindkey 将此特定序列绑定(bind)到您的 ZLE 函数( autosuggest-execute 根据您的问题)。

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

1-以这种方式启动 xterm:

% xterm -xrm '*.VT100.translations: #override Ctrl <Key>Return: string(0x1b) string("M")'

注意:我们使用了Return ,但这是Enter我们将以这种方式绘制 map 。

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

% bindkey '^[M' autosuggest-execute

3-现在输入 CTRL-Enter 运行 autosuggest-execute

这是更通用的解决方案,适用于几乎所有终端模拟器:

像上面一样,让我们​​将 Ctrl + Enter 绑定(bind)到尚未被其他组合绑定(bind)的序列(我们选择 Esc + M 此处)。使用Compose (5) X11机制:添加一个文件$HOME/.XCompose,其中包含多键输入序列Ctrl + M的特定映射。然后,使用 zsh 中的 bindkey 将此特定序列绑定(bind)到您的 ZLE 函数( autosuggest-execute 根据您的问题)。

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

1- 创建一个名为 $HOME/.XCompose 的新文件

在此文件中添加以下内容:

include "%L"
! Ctrl <Return> : "\033M"

注1:我们使用了Return ,但这是Enter我们将以这种方式绘制 map 。

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

注 3:第一行 ( include... ) 是为了让其他快捷键保持工作状态(例如 ^ + e 映射到 ê)。

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

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

% bindkey '^[M' autosuggest-execute

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

关于zsh - 如何在zsh中绑定(bind)CTRL + Enter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43428384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com