Einer meiner Hauptgründe für die Verwendung von Emacs ist die Schaffung einer leistungsstarken Umgebung nach dem ssh
Einbau in einen Remote-Computer. Das erste, was ich nach dem Start von Emacs mache, ist M-x shell
, eine Befehlszeile abzurufen. Da es eine Weile dauert, bis Emacs gestartet ist, ist es sehr praktisch, Emacs nach dem Parsen meiner Initialisierungsdatei zu bitten, eine Shell zu starten, wenn ich sie ausführe (ich habe einige Shell-Hooks eingerichtet, um das eine und das andere zu tun ). Idealerweise möchte ich es mit einer zusätzlichen Option ausführen können, damit ich meiner Initialisierungsdatei auf den Remotecomputern nichts Spezielles hinzufügen muss (ich könnte einen bash
Alias einrichten, wenn ich möchte). Etwas wie das:
emacs afile1 afile2 -startShell
Angesichts der Tatsache, dass das Herstellen der sicheren Verbindung etwa 30 Sekunden dauert, möchte ich die "start a shell" in den ssh
Befehl selbst einbauen und ssh
mit " -t
ein bildschirmbasiertes Programm starten" .
ssh -t me@remote emacs afile1 afile2 -startShell
Ich habe mir die Dokumentation zu Befehlszeilenargumenten für Emacs angesehen, aber ich beginne immer noch mit Emacs und Lisp sowie der Anpassung, und es war nicht sofort klar, wie mit Befehlszeilenargumenten umgegangen werden soll. Wie würde ich das machen?
( Verwandte Frage zueshell
vom Benutzer @Name erwähnt.)
ssh -t me@remote 'emacs -f shell'
funktioniert wie ein Traum.Antworten:
Mit der Option -f können Sie eine Emacs-Funktion über die Befehlszeile aufrufen.
Der Kommentar zeigt, wie dies über ssh mit -t gemacht wird, und das ist eine Möglichkeit. Es hat jedoch einige Nachteile. Das wichtigste ist, dass Ihre Emacs remote ausgeführt werden. Dies bedeutet, dass Sie alle Ihre Emacs-Konfigurationsdaten auf dem Remote-System haben und einige lokal für Ihre lokale Version verwalten müssen. Sie verlieren auch etwas an Flexibilität, wenn Sie Dinge lokal und remote erledigen und sich vielleicht dazwischen bewegen möchten.
Eine Alternative wäre, Ihre Emacs lokal auszuführen und eine Shell über die Befehlszeile und dann ssh über diese Shell zu starten. Sie können tramp over ssh verwenden, um Dateien usw. zu bearbeiten, und dann die Shell verwenden, um eine interaktive ssh-Sitzung auszuführen.
Sobald Sie damit vertraut sind, können Sie sich einige der ssh-bezogenen Pakete für Emacs ansehen. Es sollte dann möglich sein, eine Funktion aus einem dieser Pakete über die Befehlszeile aufzurufen, um die Erstellung einer SSH-Sitzung zu automatisieren. Möglicherweise müssen Sie eine einfache Wrapper-Funktion schreiben, um dies zu vereinfachen. Dann müssen Sie nur noch 1 Emacs-Konfigurationssetup verwalten und erhalten zusätzliche Flexibilität.
quelle
ssh -t ... 'emacs -f shell'
direkt von einem Terminal aus darin besteht, dass ich eine separate Remote-Emacs-Konfiguration auf dem neuesten Stand halten muss. Ich habe mit tramp herumgespielt und jetzt habe ich die Startzeit auf ein akzeptables Maß reduziert, da die gemeinsame Nutzung von SSH-Verbindungen verwendbar und äußerst hilfreich ist, um beispielsweisescp
Remote-Dateinamen zu vervollständigen. Es ist jedoch immer noch keine nahtlose Lösung für die Ausführung innerhalb einer einzelnen Sitzung, und die Nachteile überwiegen derzeit die Vorteile.ssh
die Eingabeaufforderung mit einigen^
vorangestellten Zeichen schlecht angezeigt . Heute habe ich es erneut versucht und das Bearbeiten von Dateien ist nahtlos, aber die Eingabeaufforderung ist immer noch durcheinander. Mein Verdacht ist auch, dass nicht alles nahtlos sein wird.ag
Zum Beispiel hat das Ausführen einen Prozess auf dem Remote-Computer ausgelöst, aber ich hatte weniger Glück beim Ausführen einesrgrep
. Es scheint sicher, dass es sich lohnt, mehr darüber nachzudenken ( github.com/ieure/ssh-el auf melpa sieht interessant aus), wenn ich Zeit habe - und alle Fragen auf dieser Site zurückzusenden. Danke, dass du es angesprochen hast.