23

如果完成目标是多级文件夹中的文件,则 Bash 选项卡完成会在第一次完成后停止进一步完成添加额外的空间。

例如,我在路径~/Documents/foo/bar.txt 中有一个文件,我想列出它。我在输入时遇到以下问题

a@b:~$ls Docu <TAB>

我明白了

a@b:~$ls Documents |(<-this is the cursor, so there is an extra space afer Documents)

所以我不能进一步完成标签。我必须退格来删除多余的空间。

通常我想得到:

a@b:~$ls Docu <TAB>
a@b:~$ls Documents/ <TAB>
a@b:~$ls Documents/foo/ <TAB>
a@b:~$ls Documents/foo/bar.txt
4

4 回答 4

22

仅作记录:adobereader-enu (acroread) 包中还有一个错误会破坏 bash 完成。在这种情况下,您可以删除符号链接:

rm /etc/bash_completion.d/acroread.sh

另请参阅:https ://bugs.launchpad.net/ubuntu/+source/acroread/+bug/769866

于 2013-02-20T08:46:00.047 回答
6

我在 Ubuntu 11.10 和 12.04 中完成 bash 时遇到了同样的问题。我发现通过编辑 /etc/bash_completion 可以让许多命令开始正常工作。具体来说,我注释掉了以下部分:

####
# makeinfo and texi2dvi are defined elsewhere.
#
#for i in a2ps awk bash bc bison cat colordiff cp csplit \
#    curl cut date df diff dir du enscript env expand fmt fold gperf gprof \
#    grep grub head indent irb ld ldd less ln ls m4 md5sum mkdir mkfifo mknod \
#    mv netstat nl nm objcopy objdump od paste patch pr ptx readelf rm rmdir \
#    sed seq sha{,1,224,256,384,512}sum shar sort split strip tac tail tee \
#    texindex touch tr uname unexpand uniq units vdir wc wget who; do
#    have $i && complete -F _longopt -o default $i
#done

现在 ls 再次运行良好。我还没有弄清楚为什么 mv 仍然行为不端。

于 2012-08-22T21:08:01.103 回答
4

已在 askubuntu 上得到解答。它与这里的错误有关

来自上述线程的相关答案:

编辑 /etc/bash_completion 第 1587 行,将默认值更改为文件名(先备份)。

于 2013-08-06T18:43:40.243 回答
0

我还通过在 /etc/bash_completion.d/acroread.sh (Ubuntu 12.04)中用 _filedir_pdf 更改 _filedir 来解决这个问题

acroread bash 补全更改了 _filedir 函数,从而改变了许多其他 alsobash 补全函数的行为

于 2015-01-28T14:47:48.660 回答