bpython-подобное автозаполнение и описание параметров в Emacs Python Mode? - PullRequest
9 голосов
/ 29 сентября 2011

Я уже некоторое время использую bpython для всех моих потребностей в интерпретации Python.Это восхитительно, особенно когда вы используете незнакомые новые библиотеки или библиотеки с множеством функций.В любом случае, хорошо иметь интерпретатор bpython, работающий параллельно с тем, что я делаю, но было бы еще лучше, если бы у меня была и функция, похожая на автозаполнение, и описание параметров таким же образом, как bpython делает , в то время как Я редактирую код в Emacs.Я полностью сумасшедший?У кого-нибудь есть идеи, как это сделать?

Спасибо, Брэдли Пауэрс

1 Ответ

10 голосов
/ 03 октября 2011

Ты не совсем сумасшедший.

python-mode может интегрироваться с eldoc-mode для отображения спецификации arg функции, которую вы вызываете в точке. Просто сделайте M-x eldoc-mode, пока вы находитесь в файле python, чтобы включить его, и он должен начать работать. Он говорит с нижним буфером python для прямой проверки функций, поэтому он всегда должен быть прилично точным. Вы можете включить его автоматически для всех новых python-mode буферов с помощью (add-hook 'python-mode-hook '(lambda () (eldoc-mode 1)) t) в вашем файле запуска emacs. Теперь я должен сказать, что я не занимаюсь обычным программированием на Python, и что когда я попробовал это прямо сейчас, это не сработало. Я потратил несколько минут на изучение исходного кода, и все, кажется, на месте, но код, который он запускает в подчиненном процессе, просто возвращает пустую строку. Возможно, это просто мои настройки, или я читаю не те исходные файлы; трудно сказать.

Emacs предоставляет несколько различных типов расширения / автозаполнения. По умолчанию у вас есть доступ к dabbrev-expand, нажав M-/. Это довольно простая форма завершения; он просто предназначен для работы с любым старым файлом, который вы редактируете. Более сложным является hippie-expand, но даже это ничего не делает для Python. Документация говорит, что он может интегрироваться с hippie-expand для точного завершения, но это может быть ложью; Я не мог понять, как это работает. Небольшое возмущение показывает несколько связанных с этим решений, все из которых, похоже, основаны на pymacs. Если бы я собирался заняться программированием на python и у меня еще не было достаточно сложной установки emacs, я бы, вероятно, начал с установки emacs-for-python . Это выглядит довольно полной настройкой, и даже утверждает, что имеет живое предупреждение / обнаружение ошибок.

В духе помощи другим, чтобы помочь себе, я хотел бы указать, как я натолкнулся на всю эту информацию. Моим первым шагом было открыть файл в python-mode. На самом деле у меня не было никакого доступного кода на Python, поэтому я просто пошел в свой рабочий буфер и сделал его буфером Python (M-x python-mode). Затем я попросил помощи об этом странном новом режиме (C-h m), чтобы посмотреть, на что он способен. Его автор любезно предоставил краткое описание возможностей режима, в котором упоминаются eldoc-mode, Imenu, outline-mode, hippie-expand, таблицы rlcompleter, abbrev и многие другие. Оттуда я начал смотреть на исходный код. Например, для интеграции с eldoc-mode он определяет функцию с именем python-eldoc-function и передает ее модулю eldoc для использования в буферах python. Чтение этого кода показывает мне, как он взаимодействует с нижним буфером и т. Д.

Я надеюсь, что это поможет.

...