使用IPython 5时奇怪的shell输出


37

我刚刚升级到最新版本的IPython,现在在emacs中使用它时出了点问题。

当在常规的终端中使用它,它工作正常(颜色,标签完成等),但是无论是在M-x eshellM-x shell代替outputing In [1]:,它实际上输出[?12l[?25hOut[1]输出到[J[?7h[?12l[?25h[?2004l[?7hOut[1]:

也许这是IPython使用的emacs上没有的终端的某些功能,但是我想知道它是哪一个。

Terminal.app:

In [1]: 2+2
Out[1]: 4

埃马克斯

[?12l[?25h2+2
[J[?7h[?12l[?25h[?2004l[?7hOut[1]: 4

您是否在上游打开了错误?我什么也找不到,但是要重新设计Gmane来搜索ATM还是有点困难。
拉斯姆斯16/09/09

2
作为参考,上游错误是#25306
npostavs

Answers:


41

IPython 5具有一个新的终端接口,该接口与Emacs的劣质外壳不兼容。要修复它,请将--simple-prompt标志添加到IPython命令:

(setq python-shell-interpreter "ipython"
    python-shell-interpreter-args "--simple-prompt -i")

从文档中:

新界面与Emacs的“下层外壳”功能不兼容。要继续使用它,请将--simple-prompt标志添加到Emacs运行命令。该标志禁用大多数IPython功能,依靠Emacs提供诸如制表符补全之类的功能。

参考:http : //ipython.readthedocs.io/en/stable/whatsnew/version5.html#id1


6
是的,这是我一开始所做的,但是缺乏多行支持(对于函数定义最重要)使我回到了ipython4。应该注意的是,尽管ipython 5在Mx术语下工作正常。
文字

3
不过,通过变量设置此标志对于Elpy仍然非常有用python-shell-interpreter-args。如果您还没有尝试过Elpy,则应该检查一下。它使您可以在单独的缓冲区中编写函数定义,并仅需一个命令即可轻松将它们传递给解释器。在这种情况下,您可以利用Emacs的所有编辑命令并进行交互式会话-兼具两个方面的优势。
里卡多·利马

1
@Literal的原因也写在链接上:它们在IPython 5上由using readline变为prompt_toolkitprompt_toolkit与Emacs shell不兼容,它们的工作方式与term:据我所知,shell运行哑终端的目的是更像标准的Emacs缓冲区,而term运行实际的完整终端模拟器。外壳程序似乎与兼容,readline但与不兼容prompt_toolkit,这将解释提示显示转义序列的提示。由于term运行完整的终端,因此可以正确解释转义序列。
里卡多·利马

1
我不接受它,因为我想保留其他功能,也许使用其他具有更多功能的外壳模式。但是我想我必须忍受它。
文字

1
@CodyChan禁用与UI有关的IPython功能,例如完成度,颜色等。它保留诸如%magic命令,输入/输出历史记录,!shell命令,?help命令等内容
。– jpkotta

0

有一种无需使用--simple-prompt即可在emacs shell中打开IPython的方法

1. pip install rlipython

2. Open IPython in terminal

3. Run import rlipython; rlipython.install() 

之后,您应该能够直接在emacs shell中打开ipython而不遇到显示问题。

不过,我的情况还有一个问题:由于某种原因,即使显示正确之后,我仍然无法直接将一些多行类定义复制粘贴到emacs shell中的ipython中。我当前的解决方案是使用Ipython%paste命令。如果您有更好的方法,请告诉我。

PS:我正在使用Ubuntu 16.04。有人使用MacOS表示它破坏了IPython。



它破坏了ipython的安装
Diogo

以何种方式?它对我来说很好
DataHungry

它在macOS上中断了IPython,github.com / ludwigschwardt / python
Alvin
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.