Подтвердить что ты не робот

Автозаполнение Vim, Python и Django (pysmell?)

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

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

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

Спасибо.

4b9b3361

Ответ 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

Ответ 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, чтобы получить свой автозаполнение.