Ich habe gerade ein Upgrade auf die neueste Version von IPython durchgeführt und jetzt stimmt etwas nicht, wenn ich es in Emacs verwende.
Wenn es in einem regelmäßigen Terminal funktioniert es gut (Farben, Tabula Fertigstellung, etc.), jedoch entweder in M-x eshell
oder M-x shell
anstelle von outputing In [1]:
, es tatsächlich Ausgängen [?12l[?25h
und Out[1]
Ausgänge [J[?7h[?12l[?25h[?2004l[?7hOut[1]:
.
Vielleicht ist es eine Funktion des Terminals, die auf von IPython verwendeten Emacs nicht verfügbar ist, aber ich würde gerne wissen, um welche es sich handelt.
Terminal.app:
In [1]: 2+2
Out[1]: 4
Emacs
[?12l[?25h2+2
[J[?7h[?12l[?25h[?2004l[?7hOut[1]: 4
Antworten:
IPython 5 verfügt über eine neue Terminalschnittstelle, die nicht mit den untergeordneten Emacs-Shells kompatibel ist. Fügen Sie
--simple-prompt
dem IPython-Befehl das Flag hinzu, um das Problem zu beheben :Aus der Dokumentation:
Referenz: http://ipython.readthedocs.io/en/stable/whatsnew/version5.html#id1
quelle
python-shell-interpreter-args
. Wenn Sie Elpy noch nicht ausprobiert haben, sollten Sie es ausprobieren. Damit können Sie Ihre Funktionsdefinitionen in einen separaten Puffer schreiben und mit nur einem Befehl an den Interpreter übergeben. In diesem Fall können Sie alle Bearbeitungsbefehle von Emacs nutzen und eine interaktive Sitzung abrufen - das Beste aus beiden Welten.readline
zuprompt_toolkit
auf IPython 5.prompt_toolkit
ist nicht kompatibel mit Emacs Schalen, die aus unterschiedlich arbeitenterm
: soweit ich weiß, Muscheln dumme Terminals mit dem Zweck der Arbeits mehr laufen wie ein Standard-Emacs-Puffer, währendterm
ein tatsächlicher voller Terminal-Emulator ausgeführt wird. Es scheint, dass Shells mit kompatibel sind,readline
aber nicht mitprompt_toolkit
, was die Eingabeaufforderung erklären würde, die die Escape-Sequenzen zeigt. Daterm
ein vollständiges Terminal ausgeführt wird, werden die Escape-Sequenzen korrekt interpretiert.Es gibt eine Möglichkeit, IPython in der Emacs-Shell zu öffnen, ohne --simple-prompt zu verwenden
Danach sollten Sie in der Lage sein, ipython direkt in der Emacs-Shell zu öffnen, ohne dass das Anzeigeproblem auftritt.
In meinem Fall gibt es jedoch noch ein weiteres Problem: Aus irgendeinem Grund konnte ich einige mehrzeilige Klassendefinitionen, auch nachdem die Anzeige korrekt war, nicht direkt in ipython in der Emacs-Shell kopieren und einfügen. Meine derzeitige Lösung besteht darin, den Befehl Ipython% paste zu verwenden. Wenn Sie bessere Ansätze haben, lassen Sie es mich bitte wissen.
PS: Ich benutze Ubuntu 16.04. Jemand, der MacOS verwendet, sagt, dass es IPython bricht.
quelle