上下文相关的 bash 补全改变了通配符行为

上下文相关的 bash 补全改变了通配符行为

一路走来,我养成了在 mv 或 rm 等命令中使用通配符后按两次 Tab 的习惯,这默认情况下会导致 bash 显示与通配符扩展匹配的文件列表。例如:

  {~/bin}-> ls p*<TAB>
  pnuke         pscp          pssh          
  prsync        pslurp        pssh-askpass  

然而,当在 Debian Jessie 中使用 bash_completion 包时,这种行为发生了变化,完成文件名时的默认行为是用第一个(且仅第一个)与扩展匹配的文件替换任何通配符。安装了 bash_completion 后,如果我使用与上面相同的示例,我的命令行在点击选项卡后将更改为如下所示:

  {~/bin}-> ls pnuke

在这种情况下 bash 可以采取的所有可能的操作中,这似乎是最无用的。有没有办法恢复默认的 readline 文件完成行为,同时在完成非文件名的内容时仍然获得 bash_completion 提供的所有其他好处?或者,如果不是默认行为,我至少可以让它做一些有用的事情吗? (即使什么都不做也会比这更有帮助。)

答案1

您是否知道可以通过输入ls p+Tab而不是ls p*+来获得所需的行为Tab

或者,您可以输入ls p*+Alt - !ls p*+ Ctrl - x+ !

请注意,Alt - !Ctrl - x+!必然是完整命令可能的命令完成, 分别。您可以重新绑定Tab完整命令通过bind '\C-i:complete-command'。这将为您提供所需的全局扩展,但可能会搞砸其他事情的完成。

希望有更好的解决方案。如果我知道哪个版本的 Bash 引入了这一更改,我就有更好的机会找到一个版本。

答案2

bash 版本不是很相关,此行为是 bash-completion(一个单独的项目)的一部分。

卸载此软件包或编辑其配置文件将为您提供所需的默认行为

相关内容