bash 按 <tab> 两次以完成文件名的行为
bash behaviour of pressing <tab> twice for filename completion
举个例子,假设我输入了姓名的一部分:
$ vi partn <= here I press <tab><tab>
partname partnook partnum <= these are the results
这是 bash
中的标准行为,这很好,但我最近在 PowerShell 上做了很多工作,默认行为是,如果您按 Tab,它会循环遍历名称,完成每个name 然后再次按 tab 将转到下一个文件,所以如果我按一次 tab,我会看到 vi ./partname
,然后再次按 tab,我会看到 vi ./partnook
,然后再次按 tab 我会看到 [=16] =].我倾向于更喜欢这种行为,因为它不需要打字(您只需按 Tab 键循环浏览,直到获得所需的文件名或命令)。
当然,Linux 中的一切都可以自定义,所以有人可以建议我如何更改默认的 bash
行为以默认遵循上述行为吗?
要坚持使制表符补全不需要两个制表符 keypresses 每当有多个匹配完成时,而不是 cycle 通过它们,in-line:
选项 A: 如果您已经拥有:
- 一个
/etc/inputrc
文件(适用于系统范围,修改需要sudo
)
- and/or 一个
~/.inputrc
文件(用户特定)
and/or
您打算广泛自定义 Readline 库and/or 想要在 脚本 调用 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 支持读取用户输入。
举个例子,假设我输入了姓名的一部分:
$ vi partn <= here I press <tab><tab>
partname partnook partnum <= these are the results
这是 bash
中的标准行为,这很好,但我最近在 PowerShell 上做了很多工作,默认行为是,如果您按 Tab,它会循环遍历名称,完成每个name 然后再次按 tab 将转到下一个文件,所以如果我按一次 tab,我会看到 vi ./partname
,然后再次按 tab,我会看到 vi ./partnook
,然后再次按 tab 我会看到 [=16] =].我倾向于更喜欢这种行为,因为它不需要打字(您只需按 Tab 键循环浏览,直到获得所需的文件名或命令)。
当然,Linux 中的一切都可以自定义,所以有人可以建议我如何更改默认的 bash
行为以默认遵循上述行为吗?
要坚持使制表符补全不需要两个制表符 keypresses 每当有多个匹配完成时,而不是 cycle 通过它们,in-line:
选项 A: 如果您已经拥有:
- 一个
/etc/inputrc
文件(适用于系统范围,修改需要sudo
) - and/or 一个
~/.inputrc
文件(用户特定)
and/or
您打算广泛自定义 Readline 库and/or 想要在 脚本 调用 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 支持读取用户输入。