Я только что обновился до последней версии IPython, и теперь что-то не так при использовании его в Emacs.
При использовании его в обычном терминале он работает нормально (цвета, завершение табуляции и т. Д.), Однако либо в виде вывода , M-x eshell
либо M-x shell
вместо вывода In [1]:
он фактически выводит [?12l[?25h
и Out[1]
выводит в [J[?7h[?12l[?25h[?2004l[?7hOut[1]:
.
Может быть, это какая-то функция терминала, недоступная в emacs, используемой IPython, но я хотел бы знать, какой это.
Terminal.app:
In [1]: 2+2
Out[1]: 4
Emacs
[?12l[?25h2+2
[J[?7h[?12l[?25h[?2004l[?7hOut[1]: 4
Ответы:
IPython 5 имеет новый интерфейс терминала, который не совместим с подчиненными оболочками Emacs. Чтобы исправить это, добавьте
--simple-prompt
флаг в команду IPython:Из документации:
Ссылка: http://ipython.readthedocs.io/en/stable/whatsnew/version5.html#id1
источник
python-shell-interpreter-args
. Если вы еще не пробовали Elpy, вы должны проверить это. Это позволяет вам записывать определения ваших функций в отдельный буфер и легко передавать их интерпретатору всего одной командой. В этом случае вы можете использовать все команды редактирования Emacs и получить интерактивный сеанс - лучший из обоих миров.readline
наprompt_toolkit
на IPython 5.prompt_toolkit
Несовместимо с оболочками Emacs, которые работают иначе, чемterm
: насколько я знаю, оболочки запускают тупые терминалы с целью работать больше как стандартный буфер Emacs, в то время какterm
работает полноценный эмулятор терминала. Кажется, что оболочки совместимы,readline
но не совместимыprompt_toolkit
, что объясняет подсказку, показывающую escape-последовательности. Посколькуterm
работает полный терминал, он правильно интерпретирует escape-последовательности.Есть способ открыть IPython в оболочке emacs без использования --simple-prompt
После этого вы сможете открыть ipython непосредственно в оболочке emacs, не испытывая проблем с отображением.
Однако в моем случае есть еще одна проблема: по какой-то причине, даже после того, как отображение стало корректным, я все еще не мог напрямую скопировать и вставить несколько многострочных определений классов в ipython в оболочке emacs. Мое текущее решение - использовать команду Ipython% paste. Если у вас есть лучшие подходы, пожалуйста, дайте мне знать.
PS: я использую Ubuntu 16.04. Кто-то использует MacOS, говорит, что это нарушает IPython.
источник