制表符补全不适用于命令


Answers:


67

检查.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 [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi

谢谢!我已经用自己的替换了.bashrc,因此无法弄清楚问题出在哪里。现在可以正常使用。
Screatch 2011年

这也修复了我的git bash在xubuntu 12.04上自动完成的问题,非常感谢。
棕榈

如何自动完成切换和命令行apt-get选项?例如,当您输入apt-get插件,然后按选项卡以自动完成它。
Reza Ghodsi's

3
我想补充一点,这个程序包bash-completion是必需的。奇怪的是,我公司的标准安装没有此软件包。
埃德加

13

我想我还会为bash完成失败添加以下补充说明-注释太长,可能对bash完成有问题的人有用,因为大概这是“通用”规范问题所有副本均被引用。

即使你有适当的线的.bashrc(如上面的答案)和bash-completion已安装的软件包,bash补尚可,如果您有任何故障shopt -s nullglobshopt -s failglob.bashrc.bash_aliases

在以下情况下,使用所有用户自定义项进行了测试,.bashrc.bash_aliases删除了这些场景,以进行公平的测试,.bashrc并使用当前和bash-completion安装的适当的bash完成线。

1)第一种情况是,当你有shopt -s failglob你的.bashrc.bash_aliases

当尝试分别使用Tab键完成目录和文件时,将发生以下错误:

cd Dbash: no match: "${COMP_WORDS[@]}"  
cat pabash: no match: words[0]=${!ref}${COMP_WORDS[i]}

但是,命令仍将成功完成。

2)shopt -s nullglob启用后,尝试用Tab键完成目录或文件将导致列出所有内容,但没有完成:

cd Do
.adobe/                  .gimp-2.6/               Podcasts/
.aptitude/               .gnome2/                 Public/
.audacity-data/          .gnome2_private/         .pulse/
............

我在这里缩短了清单,因为它很长,没有必要复制所有内容。

同样,命令完成仍将起作用。

所以,仅仅取消shopt -s failglob或者shopt -s nullglob也可以解决bash补错误的问题,假设你有你的此时,相应的线路.bashrcbash-completion安装。


1
很好的解释,当我尝试制表符完成并发生错误时,它解决了我的问题>> words [0] = $ {!ref} $ {COMP_WORDS [i]}
bagustris 2015年

尽管这是一种解决方法,但对于任何完成程序员而言,这都是一件很可惜的事情。由于可以设置nullglob(名义上要好于很多)和kin,因此任何需要旧语义的完整代码(无匹配的通配符都会导致通配符本身)应保存当前的glob设置,设置所需的glob设置,然后还原之后使用旧的Glob设置,就像通常使用IFS一样。
亚历克斯·北基

10

除了修改/etc/bash.bashrc文件(其他答案)之外,您可能还需要安装bash-completion软件包。

检查/etc/bash_completion文件是否存在。如果不:

sudo apt-get install bash-completion

(在我安装的Debian 7中最初并未安装)


7

听起来很基本,请确保bash是您的活动外壳

echo $SHELL

我只是升级到Ubuntu 14.04.1 LTS,并且没有选项卡自动完成功能,即使按照本文的建议进行操作,也只是意识到我的shell被设置为/bin/shnot /bin/bash


2

更新到Ubuntu 14.04.01

检查.bashrc中是否包含以下片段(默认情况下应存在)

sudo vim /etc/bash.bashrc(输入“ i”以编辑文件)

    # enable bash completion in interactive shells
    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

取消注释上面的7行

保存文件“ esc + w + q + enter”

重新启动bash

执行重击


1
这会做什么?默认不是这样吗?
蒂姆(Tim)

就像@Tim所说的那样,该配置是默认配置。
ssoto 2014年

这对我
有用

这个答案像一个咒语,它的投票否定????
greuze
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.