IPython в Emacs.Быстрая оценка кода - PullRequest
6 голосов
/ 28 декабря 2010

Обновление : на вопрос все еще не найден удовлетворительный ответ.

Я хотел бы «отправить» фрагменты кода интерпретатору IPython в Emacs 23.2 (Linux).Предполагая, что я уже запустил оболочку IPython в буфере в Emacs (например, используя Python-mode.el и IPython.el), есть ли способ выбрать область в другом буфере и «отправить» эту область на уже запущенный IPythonshell?

Я пробовал C-c C-c (send-buffer-to-shell) и C-c | (send-region-to-shell), но это работает только до тех пор, пока коднаписано на Python, а не на IPython (IPython может выполнять код Python).Причина в том, что для обеих команд Emacs создает временный файл с расширением .py (в отличие от расширения .ipy), который затем интерпретируется IPython как "Python-специфичный код".Это мешает мне использовать специфичные для IPython функции, такие как магические команды.

В отдельной заметке я также прочитал, что Emacs предоставляет M-| ('shell-command-on-region') для запуска выбранных областей в оболочке.Чтобы сделать это с помощью интерпретатора IPython, я попытался установить shell-file-name для моего пути IPython.Однако, когда я запускаю M-| после выбора региона, Emacs запрашивает у меня следующее:

Команда оболочки для региона:

и, если я наберу RETЯ получаю справочную страницу IPython в буфере *Shell Command Output* без выполнения региона.Есть ли какая-нибудь специфичная для IPython команда, которую я могу использовать для M-| ('shell-command-on-region'), чтобы заставить IPython запустить мой код?

Спасибо!

Ответы [ 2 ]

1 голос
/ 29 декабря 2010

Вы используете ipython.el? Это должно нормально работать с Emacs 23.

Если нет, взгляните на EmacsWiki: iPython Emacs 23 .

Существует также раздел в Eycs Cookbook IPython (ищите IPythonEmacs23; извините, я не могу публиковать более одной ссылки: (

Как только вы запустили оболочку ipython (C-c!), Вы можете выполнять фрагменты кода из областей любого буфера в этой уже запущенной оболочке, используя "Execute region (" C-c | ")

Andreas

0 голосов
/ 29 декабря 2010

Я нашел частичный ответ на Q1 :

В Python-режиме предоставляется C-c C-c, который может отправить буфер в уже открытую оболочку Python (аналогично C-c C-| может отправитьрегион к оболочке), и если установлена ​​ipython.el, то для оболочки Python по умолчанию устанавливается IPython.

К сожалению, это работает только для сценариев Python, но не для сценариев IPython.C-c C-c работает путем копирования буфера с фрагментом кода во временный файл с расширением .py , который затем отправляется в оболочку.Поскольку файл имеет расширение .py , IPython выполняет его так, как если бы он был обычным кодом Python, и поэтому фрагмент кода не может иметь специфичный для IPython код (например, магические команды IPython) ..

...