IPython 5使用時の奇妙なシェル出力


37

IPythonの最新バージョンにアップグレードしたばかりで、emacsで使用すると何か問題が発生します。

通常の端末で使用する場合は正常に動作します(色、タブ補完など)が、M-x eshellまたはのいずれかでM-x shell、outputingの代わりにIn [1]:、実際に出力[?12l[?25hおよびにOut[1]出力し[J[?7h[?12l[?25h[?2004l[?7hOut[1]:ます。

IPythonで使用されるemacsでは利用できない端末の機能の一部かもしれませんが、どの機能かを知りたいのですが。

Terminal.app:

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

Emacs

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

上流のバグを開きましたか?何も見つかりませんでしたが、Gmaneを作り直した状態でATMを検索するのも少し難しいです。
ラスマス

2
参考までに、アップストリームのバグは
25306

回答:


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
はい、最初はそれでしたが、複数行のサポートがないため(関数定義にとって最も重要)、ipython 4に戻りました。ipython5はMx用語で正常に動作することに注意してください。
リテラル

3
ただし、変数を使用して、このフラグを設定することはElpyで非常に便利ですpython-shell-interpreter-args。Elpyを試したことがない場合は、チェックアウトする必要があります。これにより、関数定義を別のバッファに記述し、たった1つのコマンドでインタープリターに簡単に渡すことができます。この場合、Emacsのすべての編集コマンドを使用して、インタラクティブセッションを取得できます。
リカルド・リマ

1
@Literal理由もリンクに書かれています:IPython 5で使用readlineから変更されました。Emacs シェルとは互換性がありません。Emacs シェルは動作が異なります:私の知る限り、シェルは標準のEmacsバッファー。実際の完全なターミナルエミュレーターを実行します。シェルはと互換性があるようですが、エスケープシーケンスを表示するプロンプトを説明するには互換性がありません。完全なターミナルを実行するため、エスケープシーケンスを正しく解釈します。prompt_toolkitprompt_toolkittermtermreadlineprompt_toolkitterm
リカルド・リマ

1
おそらく他の機能を備えた別のシェルモードを使用して、他の機能を保持したかったため、私はそれを受け入れませんでした。しかし、私はそれと一緒に暮らさなければならないと思います。
リテラル

1
!?それはIPython等完了、色、のようにそれは%の魔法のコマンドのようなもの、入力/出力履歴、シェルコマンド、ヘルプコマンドなどを保持し、UIに関連する特徴無効@CodyChan
jpkotta

0

--simple-promptを使用せずにemacsシェルでIPythonを開く方法があります

1. pip install rlipython

2. Open IPython in terminal

3. Run import rlipython; rlipython.install() 

この後、ディスプレイの問題が発生することなく、emacsシェルでipythonを直接開くことができるはずです。

私の場合、もう1つ問題があります。何らかの理由で、表示が正しくなった後でも、emacsシェルで複数行のクラス定義をipythonに直接コピーアンドペーストできませんでした。私の現在の解決策は、Ipython%pasteコマンドを使用することです。より良いアプローチがある場合は、お知らせください。

PS:Ubuntu 16.04を使用しています。MacOSを使用している人が、IPythonを壊すと言っています。



ipythonインストールが破損します
Diogo

どのように?それは私のために罰金を作品
DataHungry

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.