Django bash completion在bash中启用了django-admin.py和manage.py命令的tab-completion.
zj for django有自动完成脚本,但它们不适用于自定义命令.其中一个是oh-my-zsh项目.
我也知道bashcompinit但它似乎不适用于django-admin,产生以下错误:
./manage.py Traceback (most recent call last): File "./manage.py",line 10,in <module> execute_from_command_line(sys.argv) File "lib/python2.7/site-packages/django/core/management/__init__.py",line 385,in execute_from_command_line utility.execute() File "lib/python2.7/site-packages/django/core/management/__init__.py",line 356,in execute self.autocomplete() File "lib/python2.7/site-packages/django/core/management/__init__.py",line 266,in autocomplete cwords = os.environ['COMP_WORDS'].split()[1:] File "bin/../lib/python2.7/UserDict.py",line 23,in __getitem__ raise KeyError(key) KeyError: 'COMP_WORDS'
是否有可能让Django bash完成与zsh一起使用?或者是否有其他替代方案可以允许使用django admin自定义命令.
解决方法
你可以修补django_bash_completion,如下所示:
--- django_bash_completion.old 2014-12-23 10:41:35.589103686 +0900 +++ django_bash_completion 2014-12-23 10:43:27.224848105 +0900 @@ -33,7 +33,7 @@ _django_completion() { - COMPREPLY=( $( COMP_WORDS="${COMP_WORDS[*]}" \ + COMPREPLY=( $( env COMP_WORDS="${COMP_WORDS[*]}" \ COMP_CWORD=$COMP_CWORD \ DJANGO_AUTO_COMPLETE=1 $1 ) ) }
在zsh(这里是zsh-5.0.7)上,使用env(1)显式工作正常.以上补丁不会伤害bash(我已经在bash-4.3.30(1)-exlease上测试过).