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 ;;