gpt4 book ai didi

bash - 让 "complete"和 "menu-complete"一起工作

转载 作者:行者123 更新时间:2023-11-29 08:44:54 35 4
gpt4 key购买 nike

我发现 Bash shell 支持一种不同于“传统”自动完成的自动完成类型,所有可能性都列在下一行。

使用“传统的”自动完成,如果我键入 ch 然后按 Tab 键,我会得到如下信息:

$ ch
chacl chgrp chmod chown chvt

但是如果我将以下行添加到我的 /etc/inputrc(它将 Tab 键重新映射到内置的 menu-complete 函数):

Tab: menu-complete

然后 shell 的行为发生变化:要完成的单词被“内联”替换为可能完成列表中的单个匹配项,如果我再次按 Tab 键,该单词将被替换为下一个匹配项。

我发现这很有用,但我仍然想保留传统的自动完成功能并将其绑定(bind)到组合键 Ctrl + Tab。因此,根据 readline 库文档的建议,我将以下行添加到我的 /etc/inputrc 文件中:

Ctrl-Tab: complete

但是,添加这一行似乎只会让 TabCtrl-Tab 调用传统的 complete 函数。

有人知道我做错了什么吗?

提前致谢!

最佳答案

首先,我不是这方面的专家,但我想我可以回答你的问题。首先,当您使用 Bash 时,Bash 是一个解释从终端/控制台接收到的键盘命令的 shell。当您通知 Bash 如何对 inputrc 文件中的特定组合键使用react时,您的终端会在 inputrc 文件进入等式之前精确地确定将哪个字符“发送”到 Shell。

不幸的是,在我的系统上(当然,它是 OSX - 但与 Linux 相比,我不认为这是奇怪的行为),TabCtrl-Tab将相同的键盘输入发送到 shell。事实上,Tab 和 Ctrl-Tab 都会向 shell 发送一个 Ctrl-I 命令,实际上,如果我在使用时输入 Ctrl-I终端,它会像我按 Tab 一样执行完成。

该软件(默认情况下安装在大多数 Linux 系统上)showkey 会告诉您当您按下特定的键盘输入时 shell 正在接收哪些键。

无论如何,我对您的建议是使用 Shift-Tab,它似乎会将它自己的键码发送到 shell。 Shift-Tab 在我的电脑上显示(使用 showkey)为“ [Z”,我认为这是非常标准的。因此,具有以下绑定(bind)的 inputrc 文件应该允许您使用 shift-tab 而不是 ctrl-tab 来实现您想要的:

Tab: menu-complete
"\e[Z": complete

第二个绑定(bind)中的\e 表示转义字符,而 [Z 只是使用 showkey 显示的字符。您可以通过简单地使用 cat 在 OSX 上获得类似的效果,从终端中运行 cat 并按 Shift-Tab 将显示“^[[Z”,其中 ^[ 代表转义字符和其他字符和以前一样。

我知道这并不能准确地解决您的问题,但我认为您无法使用 Ctrl-Tab 作为组合键,而无需重新映射 Ctrl- Tab 到您终端中的另一个键绑定(bind)(如果您使用的是 GUI 终端,这可能会更容易),这很可能是您不费吹灰之力就能获得的最接近的结果!

关于bash - 让 "complete"和 "menu-complete"一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12044574/

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