2014-12-19 46 views
4

Django bash completion啓用在bash中django-admin.py和manage.py命令的tab完成。是否可以在zsh中使用Django bash完成

對於django,有zsh自動完成腳本,但它們不適用於自定義命令。其中之一是oh-my-zsh項目。

我也知道bashcompinit但它似乎並沒有與Django的管理工作,產生以下錯誤:

./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管理員自定義命令。

回答

2

你可以修補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上測試過)。

+0

似乎'subshel​​l'處理混淆了zsh。例如:'(){A =(a b c);效仿-L sh; (A =「$ {A [*]}」printenv A)}'什麼也不打印,並且在這種特殊情況下會導致'KeyError:'COMP_WORDS''。但是'(){A =(a b c);模擬-L zsh; (A =「$ {A [*]}」printenv A)}'打印'a b c'。由於zsh上的這種行爲,我使用'env(1)'在我的答案中正確導出COMP_WORDS。 – hchbaw 2014-12-23 06:03:40

+0

謝謝,它的工作 – bmihelac 2014-12-23 13:25:36

+1

這個zsh錯誤最近已經解決了,所以我們不需要爲即將發佈的新zsh版本(可能是5.0.8?)需要這個解決方法。 – hchbaw 2014-12-29 13:29:38

相關問題