Можно ли использовать завершение Django bash в zsh
Завершение Django bash включает tab-завершение 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.
1 ответ:
Вы могли бы исправить
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).