Автозаполнение Vim, Python и Django (pysmell?) - PullRequest
47 голосов
/ 11 июня 2009

Кто-нибудь знает, как настроить автоматическое завершение для правильной работы с python, django и vim?

Я пытался использовать pysmell, но я не могу настроить его правильно (или, может быть, я не знаю, как он работает). Прямо сейчас я запускаю pysmell в каталоге django (я использую транк) и перемещаю полученные теги в каталог моего проекта, затем я также запускаю pysmell в каталоге проекта. Vim, тем не менее, не берет теги django, и они не завершаются автоматически.

Кто-нибудь знает, как настроить автоматическое завершение в vim, чтобы оно выполняло длинные функции django (например, get_object_or_404), а также классы / функции в моем собственном коде? Я искал в Google, но не нашел хороших ресурсов.

Спасибо.

Ответы [ 5 ]

30 голосов
/ 11 июня 2009

Прежде всего, спасибо, что задали этот вопрос, так как он заставил меня сам разобраться в этом, и это здорово!

Вот страница, которую я использовал в качестве ссылки: Выпущен PySmell v0.6: orestis.gr

  1. Установите PySmell с помощью команды setup.py install.
  2. Создайте файл PYSMELLTAGS для django, перейдя в каталог site-packages/django и запустив: pysmell . -o ~/PYSMELLTAGS.django
  3. Скопируйте этот файл в каталог вашего проекта и затем запустите pysmell ., чтобы сгенерировать файл проекта PYSMELLTAGS
  4. Убедитесь, что pysmell в вашем PYTHONPATH (export PYTHONPATH=${PYTHONPATH}:/path/to/pysmell/)
  5. Запустить vim (vim .)
  6. Источник pysmell.vim (:source /path/to/pysmell/pysmell.vim)
  7. Установить команду автозаполнения (:set omnifunc=pysmell#Complete)
  8. Введите ^ x ^ o для автозаполнения, и оно должно работать

Я понимаю, что это не устойчивое решение, но вы должны иметь возможность использовать это как начало для того, чтобы заставить его работать всегда (например, добавьте экспорт в ваш .bashrc, добавьте: source в ваш .vimrc, настройка autocmd FileType python set omnifunc=pysmell#Complete и т. д.)

Дайте мне знать, достаточно ли этого для начала. У меня это сработало!

Редактировать Я просто добавил это в свой .vimrc, и пока файлы PYSMELLTAGS & PYSMELLTAGS.django находятся в корне моего проекта, он отлично работает без какой-либо другой работы:

python << EOF
import os
import sys
import vim
sys.path.append("/usr/local/python/lib/python2.5/site-packages")
EOF
exe ":source ~/src/pysmell/pysmell.vim"
autocmd FileType python set omnifunc=pysmell#Complete
13 голосов
/ 14 октября 2012

Как я писал в других местах, я разработал джедай. Я действительно думаю, что это намного лучше, чем все существующие решения (даже PyCharm).

https://github.com/davidhalter/jedi-vim

Он построен на pythoncomplete и намного более мощный!

Работает для сложного кода: completion

И имеет дополнительные функции: enter image description here

Существует список всех возможных функций:

  • поддержка встроенных функций / классов
  • сложный модуль / функция / структура классов
  • игнорирует ошибки синтаксиса и отступов
  • несколько возвратов / выходов
  • присваивание кортежей / индексация массивов / индексация словаря
  • исключения / с утверждением
  • * args / ** kwargs
  • декораторы
  • descriptors -> property / staticmethod / classmethod
  • закрытие
  • генераторы (оператор yield) / итераторы
  • поддержка некоторых магических методов: __call__, __iter__, __next__, __get__, __getitem__, __init__
  • поддержка list.append, set.add, list.extend и т. Д.
  • (вложенные) списки / троичные выражения
  • относительный импорт
  • getattr() / __getattr__ / __getattribute__
  • аннотации функций (функция py3k, сейчас игнорируются, но обрабатываются. Я не знаю, что с ними делать.)
  • декораторы класса (функция py3k, тоже игнорируются, пока я не найду применение случай, который не работает с джедаем)
  • простой / обычный sys.path модификации
  • isinstance проверяет, если / while / assert
12 голосов
/ 11 июня 2009

alt text
(источник: dispatched.ch )

Вы можете настроить VIM с буферами, отображением буфера, автоматическим заполнением и даже отображением Py Doc.

Вот, пожалуйста,

3 голосов
/ 11 июня 2009

Мне повезло с exuberant-ctags для этого.

Я использую этот макрос в моем vimrc:

execute 'map  :!/usr/bin/exuberant-ctags -f '.&tags.' --recurse '.$_P4ROOT.' '

Вы захотите немного изменить это, чтобы оно включало ваш каталог python / site-packages / django /, а также ваш собственный код.

Затем нажмите F2 внутри vim, чтобы обновить теги, и используйте обычные привязки тегов vim для навигации.

2 голосов
/ 19 мая 2012

Сегодня вам не нужны специальные расширения для автозаполнения django в vim. Убедитесь, что у вас есть vim с поддержкой Python. Чтобы проверить это, введите xterm:

vim --version | grep python

Выход:

+ python -python3 + быстрое исправление + reltime + rightleft -ruby + scrollbind + знаки ... ...

Чтобы сделать автозаполнение, добавьте следующие строки в ваш .vimrc:

autocmd FileType python set omnifunc = pythoncomplete # Complete

if has ("python")

python import sys, os

python sys.path.append ('/ home / sergey / workspace / django')

python os.environ ['DJANGO_SETTINGS_MODULE'] = 'djangoProject.settings'

ENDIF

где:

  • sys.path.append - это путь к вашему каталогу рабочей области django
  • djangoProject - это имя вашего проекта django, который идет сразу после '/ home / sergey / workspace / django'

Наконец, сохраните его и перезапустите vim. Теперь, после '.', Вы нажимаете ctrl-x ctrl-o по умолчанию, чтобы получить автозаполнение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...