Завершение Vim Python - PullRequest
       72

Завершение Vim Python

28 голосов
/ 17 августа 2011

У меня проблемы с завершением Vim и Python. На самом деле я совершенно не понимаю, как это работает.

У меня есть общий gvim 7.3, в Windows 7 (с python / dyn) Я использую плагин SuperTab, среди многих других, некоторые из которых являются специфичными для Python, со следующими настройками в vimrc:

au FileType python set omnifunc=pythoncomplete#Complete
let g:SuperTabDefaultCompletionType = "context"
let g:SuperTabContextDefaultCompletionType = "<c-n>"

Я не установил переменную среду PYTHONPATH.

Завершение работает нормально для системных модулей.

Сначала я подумал, что это вообще не работает для несистемных код, но это не так. То, что происходит, лучше всего показано в следующем коде:

import numpy.random   # if this line is commented completion in last line works

class C(object):
    def __init__(self, x_):
        self.x=x_

    def getX(self):
        return self.x

    def pr(self):
        print 'ok'

a=C(10)  # nothing changes if I put C() instead, even though it would be wrong
a.  # here is completion in question

Проблема в том, что завершение работает (a. предлагает getX и pr), если строка импорта закомментирована. Но это есть импорт numpy.random, завершение тормозит. Примечание: этот импорт работает нормально, когда я запускаю код.

Каковы предпосылки для завершения Python? Что происходит и что я должен сделать, чтобы завершить работу для Python.

Поскольку я (относительно) новичок в Vim, любые предложения приветствуются.

EDIT: Кажется, что проблема заключается в использовании формы .b в импорте. Если я делаю из случайного импорта случайных, все в порядке. Если это достаточно легко исправить, я бы тоже хотел получить a.b для работы. Но теперь, когда я знаю, как обойти это, это не так важно.

Есть ли более необычная проблема, как эта, чтобы я знал, что происходит в будущем?

Ответы [ 2 ]

30 голосов
/ 14 октября 2012

pythoncomplete довольно старый и не поддерживается.

Попробуйте использовать джедая: https://github.com/davidhalter/jedi-vim Изначально это был улучшенный pythoncomplete, но теперь он намного мощнее!

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

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

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

  • поддержка встроенных функций / классов
  • сложный модуль / функция / структура классов
  • игнорирует ошибки синтаксиса и отступов
  • несколько возвратов / выходов
  • присваивание кортежей / индексация массивов / индексация словаря
  • исключения / с утверждением
  • * args / ** kwargs
  • декораторы
  • дескрипторы -> 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
5 голосов
/ 30 мая 2012

Python, будучи невероятно динамичным языком, не поддается завершению.Там нет действительно хорошего завершения там.Легче просто жить без него, чем бороться со всеми его проблемами, ИМО.Тем не менее, python-mode действительно фантастика, как сказал неоаскет.

...