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

标签 django bash zsh oh-my-zsh

Django bash completion在 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 管理自定义命令。

最佳答案

您可以像下面这样修补 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 上测试过)。

关于django - 是否可以在 zsh 中使用 Django bash 完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27561443/

相关文章:

python - 如何防止在 python 退出时在 bash 中执行按键

loops - zsh sleep 辅助循环

zsh - 为 zsh 编程自定义选项卡完成

python - django 两个 ModelForms 在一个模板上具有相同的字段名称

linux - 为新的 Hadoop 集群自动配置 SSH

ruby - RVM 不是函数,选择 'rvm use ...' 的 ruby 将不起作用

zsh - 将函数输出通过管道传递到另一个函数

python - 使用 AJAX 在 Django 中更改密码

python - Django 将功能添加到模板中的按钮

django 发布复选框数据