Ich bin ein ziemlich geübter vim Benutzer, aber Freunde von mir erzählten mir so viel gutes Zeug über Emacs, dass ich mich entschied, es zu versuchen - besonders nachdem ich über den treffend benannten bösen Modus herausgefunden hatte ...
Wie auch immer, ich arbeite gerade an einem Python-Skript, das Benutzereingaben erfordert (eine Unterklasse von cmd.Cmd). In vim, wenn ich es ausprobieren wollte, könnte ich einfach :!python %
machen und dann mit meinem Skript interagieren, bis es beendet wird. In Emacs probierte ich M-! python script.py
, wodurch das Skript zwar in einem separaten Puffer laufen würde, aber RETURNs scheint nicht zurück zum Skript gesendet zu werden, sondern stattdessen vom Emacs-Puffer. Ich habe auch versucht, sich die C-c C-c
des Python-Modus anzusehen, aber dies führt das Skript in einem temporären Verzeichnis aus, während ich es nur in (pwd)
ausführen möchte.
Also, gibt es eine kanonische Art, das zu tun?
Ich verwende gerne den Emacs-Befehl "compile", um meine Python-Skripte zu testen / auszuführen. M
- X
kompilieren RET
ruft den Standard "make -k" auf, aber wenn Sie das löschen und die Befehlszeile für Ihr Skript (einschließlich der Optionen) eingeben, werden nachfolgende "compiles" das neue "compile" bereitstellen "Befehl automatisch. Die gesamte Ausgabe Ihres Skripts wird im Kompilierungspuffer angezeigt. (Im Gegensatz zur Shell bietet dies jedes Mal, wenn es aufgerufen wird, einen schönen sauberen Puffer. Gut für die Suche und so. Wenn Sie vergessen, Ihr Skript vor der Ausführung zu speichern, fragt Sie das Kompilieren, ob Sie die Datei speichern möchten.)
Sie werden Ihre Befehlszeile verlieren, wenn Sie Emacs neu starten. Aber Sie können Emacs dazu bringen, den Kompilierbefehl für den Puffer, der Ihr Skript enthält, zu setzen, indem Sie am Ende des Python-Skripts diese Art von Code einfügen (eigentlich ein Python-Kommentar):
%Vor%Dies ist praktisch für Skripte mit komplizierten Aufrufen. Hinweis: Das Python-Kommentarzeichen '#' schützt dies vor dem Python-Interpreter, während Emacs weiß, dass diese Variablen gesetzt werden müssen, da es beim Öffnen der Datei am Ende jeder Datei steht.
Ich würde gerne in meinem Python-Skript zu "Kompilierfehlern" springen können, so wie es der Kompilierbefehl tut, wenn Sie ihn zum Kompilieren von C-Code verwenden, aber ich bin zu faul, den regulären Emacs-Ausdruck dafür zu erstellen Arbeit. Vielleicht würde das eine weitere große Frage für den Stack-Überlauf stellen!
Ich denke, ansi-term
hat die zuverlässigste Emulation eines Terminals. Aber ich sehe keine Möglichkeit, Argumente an den Prozess zu übergeben. Sie können es natürlich einfach von einer Shell im ansi-term
-Puffer aus starten.
Aber ich denke, es ist am besten, python-send-buffer
nicht zu verwenden, sondern stattdessen eine neue Funktion zu verwenden, die es "richtig" macht, indem man den Pfad zur aktuellen Datei sendet, anstatt eine temporäre Datei zu erstellen. Es gibt natürlich ein paar kleine Unterschiede darin, dass Sie die aktuelle Datei zuerst speichern müssen, aber das Folgende sollte Sie zumindest auf den richtigen Weg bringen.
Ich habe es überprüft und das ermöglicht dir zu interagieren. Um Registerkarten zu erhalten, haben Sie ein paar Optionen.
Sie können die Registerkarte "Registerkarte" erneut binden, um eine literale Registerkarte in inferior-python-mode-map
zu sein:
Ich bin mir sicher, dass es andere gibt, an die ich nicht denken kann
Ich verwende gerne den Emacs-Befehl "compile", um meine Python-Skripte zu testen / auszuführen. global-set-key
- %code% kompilieren %code% ruft den Standard "make -k" auf, aber wenn Sie das löschen und die Befehlszeile für Ihr Skript (einschließlich der Optionen) eingeben, werden nachfolgende "compiles" das neue "compile" bereitstellen "Befehl automatisch. Die gesamte Ausgabe Ihres Skripts wird im Kompilierungspuffer angezeigt. (Im Gegensatz zur Shell bietet dies jedes Mal, wenn es aufgerufen wird, einen schönen sauberen Puffer. Gut für die Suche und so. Wenn Sie vergessen, Ihr Skript vor der Ausführung zu speichern, fragt Sie das Kompilieren, ob Sie die Datei speichern möchten.)
Sie werden Ihre Befehlszeile verlieren, wenn Sie Emacs neu starten. Aber Sie können Emacs dazu bringen, den Kompilierbefehl für den Puffer, der Ihr Skript enthält, zu setzen, indem Sie am Ende des Python-Skripts diese Art von Code einfügen (eigentlich ein Python-Kommentar):
%Vor%Dies ist praktisch für Skripte mit komplizierten Aufrufen. Hinweis: Das Python-Kommentarzeichen '#' schützt dies vor dem Python-Interpreter, während Emacs weiß, dass diese Variablen gesetzt werden müssen, da es beim Öffnen der Datei am Ende jeder Datei steht.
Ich würde gerne in meinem Python-Skript zu "Kompilierfehlern" springen können, so wie es der Kompilierbefehl tut, wenn Sie ihn zum Kompilieren von C-Code verwenden, aber ich bin zu faul, den regulären Emacs-Ausdruck dafür zu erstellen Arbeit. Vielleicht würde das eine weitere große Frage für den Stack-Überlauf stellen!
Ich bin ein ziemlich geübter vim Benutzer, aber Freunde von mir erzählten mir so viel gutes Zeug über Emacs, dass ich mich entschied, es zu versuchen - besonders nachdem ich über den treffend benannten bösen Modus herausgefunden hatte ...
Wie auch immer, ich arbeite gerade an einem Python-Skript, das Benutzereingaben erfordert (eine Unterklasse von cmd.Cmd). In vim, wenn ich es ausprobieren wollte, könnte ich einfach %code% machen und dann mit meinem Skript interagieren, bis es beendet wird. In Emacs probierte ich %code% , wodurch das Skript zwar in einem separaten Puffer laufen würde, aber RETURNs scheint nicht zurück zum Skript gesendet zu werden, sondern stattdessen vom Emacs-Puffer. Ich habe auch versucht, sich die %code% des Python-Modus anzusehen, aber dies führt das Skript in einem temporären Verzeichnis aus, während ich es nur in %code% ausführen möchte.
Also, gibt es eine kanonische Art, das zu tun?
Ich denke, %code% hat die zuverlässigste Emulation eines Terminals. Aber ich sehe keine Möglichkeit, Argumente an den Prozess zu übergeben. Sie können es natürlich einfach von einer Shell im %code% -Puffer aus starten.
Aber ich denke, es ist am besten, %code% nicht zu verwenden, sondern stattdessen eine neue Funktion zu verwenden, die es "richtig" macht, indem man den Pfad zur aktuellen Datei sendet, anstatt eine temporäre Datei zu erstellen. Es gibt natürlich ein paar kleine Unterschiede darin, dass Sie die aktuelle Datei zuerst speichern müssen, aber das Folgende sollte Sie zumindest auf den richtigen Weg bringen.
%Vor%Ich habe es überprüft und das ermöglicht dir zu interagieren. Um Registerkarten zu erhalten, haben Sie ein paar Optionen.
Sie können die Registerkarte "Registerkarte" erneut binden, um eine literale Registerkarte in %code% zu sein:
%Vor%Ich bin mir sicher, dass es andere gibt, an die ich nicht denken kann
Ich weiß nichts über canonical , aber wenn ich mit einem Skript interagieren müsste, würde ich M - x % co_de machen % RET und führen Sie das Skript von dort aus.
Es gibt auch M - x %code% für ernsthaftere Terminal-Emulation, nicht nur Shell-Sachen.
Ich verwende diese Hooks derzeit, um meine Kompilierungsbefehle zu definieren:
%Vor%Zusammen mit diesem lambda set, um die Kompilierfunktion interaktiv aufzurufen:
%Vor%Ein Knopf, um alle zu beherrschen!
Wenn Sie F4 drücken (in meinem Fall können Sie den Schlüssel selbst im Lambda für %code% setzen), wird eine im C ++ - oder C-Modus geöffnete Datei kompiliert und eine Datei in Python oder Perl-Modus wird (interaktiv) ausgeführt werden
Noch eine weitere Option:
Die Verwendung von %code% funktioniert gut mit fgallinas python.el - pwd ist der Speicherort der Pufferdatei.
Wenn Sie C-c C-c verwenden, wird ein Puffer erstellt (suchen Sie inferior-python). Versuchen Sie, zu diesem Puffer * zu wechseln. Jedes Mal, wenn Sie C-c C-c drücken, wird das Ergebnis dort angezeigt. Sie müssen diesen Puffer sehen, um die Ergebnisse zu erhalten. Verwenden Sie C-x 2, damit Sie beide Puffer gleichzeitig sehen können. Probieren Sie auch C-c C-z (wechseln zur Shell).
* Ich verwende Ibuffer, um Puffer zu verwalten, ist sehr gut. (übrigens, diese Ссылка ist ein ausgezeichneter Ort, um einige Emacs zu lernen)
EDIT: Haben Sie C-c C-p ausprobiert?
Noch eine weitere Option:
Die Verwendung von C-c C-c
funktioniert gut mit fgallinas python.el - pwd ist der Speicherort der Pufferdatei.
Wenn Sie C-c C-c verwenden, wird ein Puffer erstellt (suchen Sie inferior-python). Versuchen Sie, zu diesem Puffer * zu wechseln. Jedes Mal, wenn Sie C-c C-c drücken, wird das Ergebnis dort angezeigt. Sie müssen diesen Puffer sehen, um die Ergebnisse zu erhalten. Verwenden Sie C-x 2, damit Sie beide Puffer gleichzeitig sehen können. Probieren Sie auch C-c C-z (wechseln zur Shell).
* Ich verwende Ibuffer, um Puffer zu verwalten, ist sehr gut. (übrigens, diese Ссылка ist ein ausgezeichneter Ort, um einige Emacs zu lernen)
EDIT: Haben Sie C-c C-p ausprobiert?