【问题标题】:Bash will not auto-complete (Tab) with filesBash 不会自动完成(制表符)文件
【发布时间】:2014-03-28 19:13:59
【问题描述】:

bash 中的自动完成功能(使用 Tab)适用于文件夹,但适用于文件。

  • 我正在运行 Ubuntu 13.10
  • 我没有动过我的 .bashrc 文件

这是 .bashrc 文件底部的样子,其中 bash-completion 部分已安装和更新:

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

有什么想法吗?

【问题讨论】:

  • 也可以试试zsh。我喜欢它的完成能力。
  • @BasileStarynkevitch:谢谢你的建议。到目前为止我一直在使用 bash,但我会尽快研究 zsh!

标签: linux bash ubuntu terminal bash-completion


【解决方案1】:

第三方“bash_completion”包(不要与 bash 或其本机补全混淆)有时很难预测。

  1. 某些命令专门设置为永远不会完成文件,例如cd
  2. 某些命令会拒绝完成某些文件名,因为 bash_completion 没有意识到程序会处理它们,例如 mplayer
  3. 有些命令有问题,尤其是当路径包含空格和其他字符时,例如scp

如果您遇到 bash_completion 没有帮助的情况,您可以使用M-/(又名Alt + /)来使用 bash 的本机文件名完成。

如果某个命令经常给您带来麻烦,您可以在.bashrc 末尾使用complete -r thatcommand 禁用此命令的bash_completion。

【讨论】:

  • 使用 bash 的原生完成对我有用!奇怪的是 Tab 不知何故没有做同样的事情,因为它没有重新映射到其他东西。现在,这已经为我解决了,谢谢大家花时间写下你的答案。
  • @Finn 您是否有一个命令行示例,在该示例中您正在点击选项卡但它没有完成您所期望的?请记住,命令本身和参数也是相关的,因为 bash_completion 使用它们来确定要完成的内容。
  • +1 表示“完成 -r”。在空格前添加 \ 时,Cygwin bash 停止使用制表符自动完成,这成功了。
  • 您引用了 mplayer 作为破坏行为的示例,但您的解决方案 complete -r mplayer 不起作用。
  • @burito 你有测试用例吗?
【解决方案2】:

.bashrc 文件似乎没问题,所以问题可能出在 bash_completion 文件之一中。

我建议你备份文件并尝试用这些替换它们:

对于 /etc/bash_completion:

http://pastebin.com/0HWHsbyR

对于 /usr/share/bash-completion/bash_completion:

http://pastebin.com/c49KrbXT

这是 ubuntu 13.10 的标准完成文件。在检查它是否工作之前重新启动控制台。

【讨论】:

  • 刚试过这个,据我所知,它并没有真正影响任何事情。我还尝试“重新安装”(清除并安装)bash-completion 无济于事。
【解决方案3】:

一个可能的原因是a file named !。当这样的文件存在时,一些默认的bash-completion 设置有a bug。您可以删除文件或修补程序/usr/share/bash-completion/bash_completion,如错误链接所示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    相关资源
    最近更新 更多