我可以让 Bash 中的 Tab 自动完成不区分大小写吗?

我可以让 Bash 中的 Tab 自动完成不区分大小写吗?

Ubuntu 的终端使用区分大小写的自动完成功能,这与 Linux 的预期一致。

但我认为有时使用不区分大小写的字符会更方便,这样就不必在开头输入准确的名字,而且可能值得承受额外的误报。是否可以改变这种行为?

答案1

为了使bash当前用户不区分大小写:

在终端中运行以下 shell 脚本:

# If ~/.inputrc doesn't exist yet: First include the original /etc/inputrc
# so it won't get overriden
if [ ! -a ~/.inputrc ]; then echo '$include /etc/inputrc' > ~/.inputrc; fi

# Add shell-option to ~/.inputrc to enable case-insensitive tab completion
echo 'set completion-ignore-case On' >> ~/.inputrc

启动一个新的 shell(重新打开终端)。

要在整个系统范围内进行更改:

# add option to /etc/inputrc to enable case-insensitive tab completion for all users
echo 'set completion-ignore-case On' >> /etc/inputrc
# you may have to use this instead if you are not a superuser:
echo 'set completion-ignore-case On' | sudo tee -a /etc/inputrc

有关详细信息,请参阅man bash。是的,这是一个很长的页面,但 bash 是一个有点复杂的程序,如果您愿意,只需在该页面上搜索“不区分大小写”即可转到相关部分。人们通常一次学习一个 bash 选项或一次学习一个 bash 脚本,掌握所有细微差别需要很长时间。您的兴趣可能会有所不同。

答案2

打开终端并输入以下命令:

echo set completion-ignore-case on | sudo tee -a /etc/inputrc

输入密码。重启终端。

如果在某些情况下您想要删除不区分大小写,只需编辑 /etc/inputrc 文件并删除该set completion-ignore-case行。

就这样。

答案3

我知道这个问题很老了,但除非我遗漏了什么,否则我认为如果你使用 bash 我有一个非常简单的解决方案。

echo "bind 'set completion-ignore-case on'" >> ~/.bashrc

或者只需使用您最喜欢的文本编辑器添加该行即可。重新启动您的 bash 会话并享受。

答案4

您可以通过设置 GNU 的配置变量来实现这一点readline,该变量负责处理交互式 shell 中的输入。

所需的变量是completion-ignore-case,可以在 bash 会话中直接使用以下命令设置:

bind "set completion-ignore-case on"

可以将其放入set completion-ignore-case on用户~/.inputrc文件或系统中/etc/inputrc,为所有用户启用它,以便为所有未来 bash 会话启用它。这是 readline 的初始化文件。

请注意,~/.inputrc可能不存在,如果你创建它,你的本地版本将覆盖系统版本/etc/inputrc。系统版本配置了许多有用的键映射,例如Ctrl-Left/ Right,您必须链接到系统版本,这样才不会丢失它们。

实现此目的的方法是将该行放在$include /etc/inputrc的顶部~/.inputrc,例如:

$include /etc/inputrc

set completion-ignore-case on

配置完成后,您可以通过重新启动 bash 或重新加载inputrc,例如与CtrlxCtrlr。)

有关 readline 和 inputrc 的更多信息,请参见man bashman 3 readline

相关内容