5

Django bash补全在 bash 中启用了 django-admin.py 和 manage.py 命令的制表符补全。

zsh用于 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 自定义命令。

4

1 回答 1

3

您可以修补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)-release 上测试过)。

于 2014-12-23T05:51:20.213 回答