是否可以在zsh中使用Django bash完成

时间:2014-12-19 07:24:38

标签: django bash zsh oh-my-zsh

Django bash completion在bash中启用django-admin.py和manage.py命令的制表符完成。

django有zsh的自动完成脚本,但它们不适用于自定义命令。其中一个是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自定义命令。

1 个答案:

答案 0 :(得分: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)-exlease上测试过了。)