gpt4 book ai didi

两次以完成文件名的 bash 行为

转载 作者:行者123 更新时间:2023-12-02 02:31:37 24 4
gpt4 key购买 nike

举个例子,假设我输入了姓名的一部分:

$ vi partn                         <= here I press <tab><tab>
partname partnook partnum <= these are the results

这是 bash 中的标准行为,这很好,但我最近在 PowerShell 上做了很多工作,默认行为是如果你按 Tab,它会循环遍历名称,完成每个名称然后再次按 tab 将转到下一个文件,因此如果我按一次 tab,我会看到 vi ./partname,然后再次按 tab,我会看到 vi ./partnook ,然后再次按 Tab 键,我看到了 vi ./partnum。我更喜欢这种行为,因为它不需要打字(您只需按 Tab 键循环浏览,直到获得所需的文件名或命令)。

当然,在 Linux 中一切都是可定制的,所以有人可以建议我如何更改默认的 bash 行为以默认遵循上述行为吗?

最佳答案

要持续使制表符补全需要两次 Tab 按键,只要有多个匹配的补全,并且而是循环在线:

选项 A:如果您已经拥有:

  • 一个/etc/inputrc文件(适用于系统范围,修改需要sudo)
  • 和/或~/.inputrc文件(用户特定的)

和/或

您计划广泛自定义 Readline 库和/或希望在调用 read -e 时使自定义对脚本 也有效:

添加行:

"\C-i": menu-complete

任一文件,具体取决于您希望设置对所有用户还是当前用户有效(创建文件,如有必要)。

注意:或者,您可以简单地关闭按 Tab 两次 的需要并表现出标准行为立即,这意味着显示所有可能完成的多列列表,然后重新显示输入行,允许您键入其他字符 以完全完成参数或键入足够的参数以便下一个 Tab 按键明确完成:

set show-all-if-ambiguous on

选项 B:或者,您可以将 Readline 命令添加到用户特定的初始化文件(~/.bash_profile 在 macOS 上,~/.bashrc 在 Linux 和其他类 Unix 平台上),通过将它们作为一个单个参数传递给 bind builtin :

bind '"\C-i": menu-complete'

如果您更喜欢显示所有匹配行为:

bind 'set show-all-if-ambiguous on'

请注意 ~/.bash_profile/~/.bashrc 中的 bind 命令优先于 /etc 中的等效命令/inputrc~/.inputrc

如上所述,以这种方式配置 Readline 不会在调用 read -e 以激活 Readline 支持的脚本中生效读取用户输入。

关于按 <tab> 两次以完成文件名的 bash 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64956185/

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