选项卡完成时的文件列表

选项卡完成时的文件列表

tab completion我在尝试运行 python 代码时遇到了 bash shell 的奇怪行为。

当我使用多个字符后跟-前缀参数时,我可以使用制表符补全来选择文件,但仅使用一个字符就完全失败。这里有些例子:

#failed 
python prepare_yaml_files.py -i in<tab><tab>

#succeed: though `-in` is not valid 
python prepare_yaml_files.py -in in<tab><tab>

#succeed: valid argument 
python prepare_yaml_files.py --in in<tab><tab>

我想知道为什么会发生这种情况。我是否需要设置一些偏好来.bashrc解决这个问题。

答案1

我最好的猜测是您遇到了错误的自动完成脚本。我在 Debian 上看了一下/usr/share/bash-completion/completions/python,据我所知,它只自动完成以 结尾的文件名.py.py或者.pyo如果前一个单词是(的某种变体)python,或者单字符选项。

我假设这里的假设是所有看起来像是-X解释器的参数,都会在运行命令之前给出,并且您仍然需要给出脚本的名称。因此仅显示匹配.py和 的文件。.py[oc]

您可以使用 完全禁用可编程自动完成功能shopt -u progcomp。更好的修复需要编辑自动完成脚本。

我正在看的规则是这样的,我不确定我是否完整地解释了它:

    案例 $prev 中
        [...]
        !(?(*/)python*([0-9.])|-?))
            [[ $cword -lt 2 || ${words[cword-2]} != -@(Q|W) ]] \
                && _filedir
            ;;

相关内容