我在Mac Snow Leopard上,python是从homebrew
开始安装的,它有两个自定义bash完成脚本,一个用于pip
,另一个用于{{ 1}}。他们过去常常工作,但在弄乱了我的dotfiles之后他们就再也没有工作了。
django 完成来自original project,django
(来自here)如下所示:
pip completion
错误: Django完成任何时候我都会抛出它:
_pip() {
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
commands=$(pip --help | awk '/Commands\:/,/General Options\:/' | \
\grep -E -o "^\s{2}\w*" | tr -d ' ')
opts=$(pip --help | \grep -E -o "((-\w{1}|--(\w|-)*=?)){1,2}")
if [ $COMP_CWORD == 1 ] ; then
COMPREPLY=( $(compgen -W "${commands}" -- ${cur}) )
return 0
fi
if [[ ${cur} == -* ]] ; then
local command_opts=$(pip $prev --help | \
\grep -E -o "((-\w{1}|--(\w|-)*=?)){1,2}")
COMPREPLY=( $(compgen -W "${command_opts}" -- ${cur}) )
return 0
fi
}
complete -o default -F _pip pip
所以基本上它应该是一个语法问题。我complete: usage: complete [-abcdefgjksuv] [-pr] [-o option] [-A action] [-G globpat] [-W wordlist] [-P prefix] [-S suffix] [-X filterpat] [-F function] [-C command] [name ...]
时pip completion
无效。
重点是他们都曾经工作但我不知道会发生什么。
据我所知,pip + TAB
函数是内置的bash,我没有搞砸bash,只有dotfiles ..有线索?
答案 0 :(得分:0)
事实证明,这与某些命令的Apple实现与GNU / BSD命令有关。
我确实通过安装brew:
中的grep解决了pip完成问题brew install grep --default-names
这将在/ usr / local / bin / grep下安装GNU grep
,--default-names
表示它将被称为grep
而不是ggrep
和/usr/local/bin
1}}位于$PATH
之前的/bin
或/usr/bin
,它优先于grep
的苹果版本。
对于django completion,问题来自whereis
命令:
unset pythons
if command -v whereis &>/dev/null; then
python_interpreters=$(whereis python | cut -d " " -f 2-)
for python in $python_interpreters; do
pythons="${pythons} ${python##*/}"
done
pythons=$(echo $pythons | tr " " "\n" | sort -u | tr "\n" " ")
else
pythons=python
fi
complete -F _python_django_completion -o default $pythons
我搞砸了python,而/usr/bin/python
指的是一个旧的安装,不再存在了。我已修复链接(在我的情况下)指向从brew安装的python,一切正常。