Расширение Emacs для автозаполнения Python

Я ищу расширение, которое поможет в функции автозаполнения Python в Python.

Если я наберу следующий код:

a = [4,5,6]
a.p

Тогда я ожидаю, что это даст мне предложение для pop, поскольку это один из методов списка Python. Возможно ли это в Emacs?

Я пробовал установить Rope, Rope mode, Ropemacs и Pymacs. Предложение автозаполнения, которое я получаю от этого, не являются методами списка. Но он предлагает мне что-то вроде print и т. Д. Я что-то делаю не так?


person Sibi    schedule 21.01.2013    source источник


Ответы (3)


Попробуйте Jedi.el. AFAIK, он должен поддерживать ваш пример.

person Dmitry    schedule 21.01.2013

Поскольку переменные Python не имеют типов, трудно узнать, какой класс объекта переменная будет содержать в данной точке вашего кода. Представьте, если бы ваш код позже сделал a = 1. Emacs должен знать, когда переменная a относится к списку, а когда - к числу, чтобы предложить правильное завершение. Обычно это невозможно без фактического запуска кода.

person Ryan C. Thompson    schedule 21.01.2013
comment
Для этого в коде завершения потребуется какой-то синтаксический анализатор, но это не невозможно. Кроме того, часто лучше предлагать несколько не 100% точных завершений, чем ничего не предлагать. - person Dmitry; 21.01.2013
comment
Нет, анализатора недостаточно для определения типа переменной в динамически типизированном языке. В некоторых случаях можно сделать предположение о типе переменной в определенном месте кода, но это не сработает для таких вещей, как аргументы функции, которые вообще не имеют подсказок. Это не невозможно, но, возможно, сложнее, чем вместо этого просто написать статически типизированный язык. - person Ryan C. Thompson; 21.01.2013
comment
В общем да, тяжело. В данном примере не так уж и много. Нам нужно будет только беспокоиться о переназначениях и вложенных областях, которые должны управляться с помощью только синтаксического анализатора. - person Dmitry; 21.01.2013

У меня работает с vimrope из https://github.com/python-rope/ropevim/ (теперь официальный дом всех веревочных проектов)

person mcepl    schedule 14.12.2013