Автозаполнение Vim, Python и Django (pysmell?)
Кто-нибудь знает, как настроить автоматическое завершение, чтобы хорошо работать с python, django и vim?
Я пытаюсь использовать pysmell, но я не могу настроить его правильно (или, может быть, я не знаю, как это работает). Прямо сейчас я запускаю pysmell в каталоге django (я использую соединительную линию) и перемещаю полученные теги в свою директорию проектов, а затем запускаю pysmell в каталоге проекта. Тем не менее, Vim не подбирает теги django, и они не получают автоматическое завершение.
Кто-нибудь знает, как настроить автоматическое завершение в vim, чтобы он завершил длинные функции django (например, get_object_or_404), а также классы/функции в моем собственном коде? Я ткнул в google, но не нашел хороших ресурсов.
Спасибо.
Ответы
Ответ 1
Прежде всего, спасибо, что вы задали этот вопрос, поскольку это заставило меня понять это сам, и это здорово!
Вот страница, которую я использовал в качестве ссылки: выпущен PySmell v0.6: orestis.gr
- Установить PySmell с помощью команды
setup.py install
.
- Создайте файл
PYSMELLTAGS
для django, перейдя в ваш каталог site-packages/django
и запустив: pysmell . -o ~/PYSMELLTAGS.django
- Скопируйте этот файл в каталог проекта, а затем запустите
pysmell .
, чтобы сгенерировать файл проекта PYSMELLTAGS
- Убедитесь, что pysmell находится в вашем
PYTHONPATH
(export PYTHONPATH=${PYTHONPATH}:/path/to/pysmell/
)
- Запустить vim (
vim .
)
- Источник
pysmell.vim
(:source /path/to/pysmell/pysmell.vim
)
- Задайте команду автозаполнения (
:set omnifunc=pysmell#Complete
)
- Введите ^ x ^ o для автозаполнения и он должен работать
Я понимаю, что это не устойчивое решение, но вы должны иметь возможность использовать это как начало для его настройки, чтобы всегда работать (например, добавьте экспорт в ваш .bashrc, добавьте: источник в ваш .vimrc, setup autocmd FileType python set omnifunc=pysmell#Complete
и т.д.)
Сообщите мне, достаточно ли этого, чтобы вы начали. Это сработало для меня!
Edit
Я просто добавил это в мой .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
Ответ 2
alt text http://blog.dispatched.ch/wp-content/uploads/2009/05/vim-as-python-ide.png
Вы можете настроить VIM с помощью буферов, отображения буфера, автоматического завершения, даже отображения Py Doc.
Здесь вы переходите
Ответ 3
Как я писал в других местах, у меня развился джедай. Я действительно думаю, что это намного лучше, чем все существующие решения (даже PyCharm).
https://github.com/davidhalter/jedi-vim
Он построен на pythoncomplete и намного более мощным!
Он работает для сложного кода: ![completion]()
И имеет дополнительные функции:
![enter image description here]()
Существует список всех возможных возможностей:
- встроенные функции/классы поддержка
- сложные структуры модулей/функций/классов
- игнорирует ошибки синтаксиса и отступов
- несколько возвратов/выходов
- присвоения кортежей/индексирование индексов/индексация словаря
- exceptions/with-statement
- * args/** kwargs
- декораторы
- дескрипторы → свойство /staticmethod/classmethod
- закрытие
- генераторы (оператор yield)/iterators
- поддержка некоторых магических методов:
__call__
, __iter__
, __next__
,
__get__
, __getitem__
, __init__
- поддержка list.append, set.add, list.extend и т.д.
- (вложенный) список/тернарные выражения
- относительный импорт
-
getattr()
/__getattr__
/__getattribute__
- функциональные аннотации (функция py3k, игнорируются прямо сейчас, но анализируются.
Я не знаю, что с ними делать.)
Декораторы класса
- (функция py3k тоже игнорируются, пока не найду использование
случай, который не работает с джедаями)
- простые/обычные
sys.path
модификации
-
isinstance
проверяет, есть ли /while/assert
Ответ 4
Мне повезло с буйными ctags для этого.
Я использую этот макрос в своем vimrc:
execute 'map :!/usr/bin/exuberant-ctags -f '.&tags.' --recurse '.$_P4ROOT.' '
Вам нужно немного изменить его, чтобы он включал каталог python/site-packages/django/, а также ваш собственный код.
Затем нажмите F2 внутри vim, чтобы обновить теги, и используйте обычные привязки тегов vim для навигации.
Ответ 5
Сегодня вам не нужны специальные расширения для автозаполнения django в vim. Убедитесь, что у вас есть vim с поддержкой python.
Чтобы проверить его, введите xterm:
vim --version | grep python
Выход:
+ python -python3 + quickfix + reltime + rightleft -ruby + scrollbind + знаки......
Чтобы сделать автозаполнение работы, добавьте эти строки в свой .vimrc:
autocmd FileType python set omnifunc = pythoncomplete # Complete
if имеет ( "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, чтобы получить свой автозаполнение.