AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 858085
Accepted
Tobia
Tobia
Asked: 2016-12-08 08:25:53 +0800 CST2016-12-08 08:25:53 +0800 CST 2016-12-08 08:25:53 +0800 CST

shell 模式的制表符补全

  • 772

在我的 Debian 服务器上,我习惯于点击 Tab 来“预览”shell 模式的扩展:

$ cp *some*<Tab>
something  somewhat  have-some-cake
$ cp *some*_

当模式扩展为一个条目时,Tab 将模式替换为实际条目;否则它会显示匹配条目的列表。这是直观且有用的,因为它与常规的“前缀”制表符补全一致。

但是我的 Ubuntu 服务器和桌面的行为不同:即使它扩展到多个条目,Tab 也会用第一个条目替换模式。

我检查了通常的嫌疑人(/etc/bash.bashrc、/etc/inputrc 和本地版本),但找不到任何区别。

有人知道哪个设置控制这种行为吗?

command-line
  • 2 2 个回答
  • 155 Views

2 个回答

  • Voted
  1. Best Answer
    Olorin
    2017-11-22T22:34:31+08:002017-11-22T22:34:31+08:00

    与另一个答案相反,这个特殊问题可能是使用 bash-completion 的直接结果。bash-completion 包有几个错误(例如,如U&L关于类似问题的回答中所述)。

    如果我在我的.bashrc:

    # 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
    

    并启动一个新的 bash 实例,然后我得到:

    $ echo *o*<tab><tab>
    foo     food    foo.sh  
    $ echo *o*
    

    然后,如果我/usr/share/bash-completion/bash_completion像在以下位置一样获取脚本.bashrc:

    $ . /usr/share/bash-completion/bash_completion
    $ echo foo
    

    *o*立即自动完成,而不foo显示其他匹配项。

    顺便说一句,我正在使用 16.04。我不知道这是否已在较新版本中得到修复。

    $ dpkg-query --show --showformat='${Package} ${version}\n' bash bash-completion
    bash 4.3-14ubuntu1.2
    bash-completion 1:2.1-4.2ubuntu1.1
    
    • 2
  2. Adam Katz
    2017-11-22T11:16:46+08:002017-11-22T11:16:46+08:00

    Bash 中更智能的选项卡完成需要该bash-completion软件包。

    sudo apt install bash-completion
    

    Bash Completion实际上是由 Debian 直接编写和维护的。
    (另见它的Debian 包和Ubuntu 包页面。)

    安装后,它会自动加载(例如 via /etc/bash.bashrc),否则您需要指示 Bash~/.bashrc使用如下节将其加载到您的文件中:

    if [[ -z "$BASH_COMPLETION" ]] && [[ -r /etc/bash_completion ]]; then
      . /etc/bash_completion
    fi
    

    在 Red Hat 和其他人包含这个包之前,我曾经在系统之间手动复制/etc/bash_completion*。这会很好用,但我不建议这样做;它还切断了您的包管理器更新现有完成并安装新完成的机会(/usr/share/bash-completion/completions/尽管它们最初与您的自定义完成一起存在,但现在进入了/etc/bash_completion.d/)。

    • 0

相关问题

  • 如何从命令行仅安装安全更新?关于如何管理更新的一些提示

  • 如何从命令行刻录双层 dvd iso

  • 如何从命令行判断机器是否需要重新启动?

  • 文件权限如何工作?文件权限用户和组

  • 如何在 Vim 中启用全彩支持?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve