2009-05-11 8 views
34

Ich habe Emacs vor ein paar Tagen als meinen Hauptredakteur benutzt und bin dabei, alle Anpassungen zu sammeln, die ich brauche.Wie funktioniert die Remote-Entwicklung mit Emacs?

Die Hauptverwendung, die ich es gebe, ist für die Entwicklung eines C-Projekts auf einer Remote-Linux-Maschine (RHEL 5). Bisher habe ich plain vim (nur als Texteditor) und einige Shell-Skripte verwendet und eines Tages entschied ich, dass ich Emacs ausprobieren würde. Bis jetzt mag ich es.

Aber als Nachteil sehe ich, dass die Einrichtung der Umgebung für den Betrieb von Emacs ein langer Weg ist, und anstatt es direkt auf der Entwicklungsmaschine zu verwenden (und die Umgebung auf jeder Maschine einzurichten) würde ich versuchen um es einfach von meinem Laptop zu benutzen und die Fernentwicklung zu machen.

Ich weiß über TRAMP, aber das bearbeitet nur Remote-Dateien, soweit ich weiß. Das große Hindernis ist das Ausführen von Shell-Befehlen auf dem Remote-Rechner mit einem einzigen Tastendruck (Ich habe F5 gebunden, um einen benutzerdefinierten Kompilierbefehl auf den Emacs des entfernten Rechners auszuführen).

Wie Sie Shell-Befehle auf einem Remote-Computer mit einem einzigen Emacs-Tastenanschlag ausführen? Kennen Sie weitere Tipps & Tricks, um vollständige Remote-Entwicklung zu tun?

+0

Sie können ssh mit x-forwarding verwenden und Emacs auf dem Remote-Computer ausführen, der auf Ihrem Computer angezeigt wird. – Nifle

+4

In Emacs 23.2 ist der Befehl "compile" automatisch remote, wenn er aus einem TRAMP-Puffer ausgeführt wird. – MarcH

Antwort

10

Bei der Remote-Entwicklung verwende ich screen, die mehrere virtuelle Remote-Terminals zur Verfügung stellt, die durch Drücken einiger Tasten verfügbar sind. Dies ist für mich unverzichtbar. Es stellt nicht nur virtuelle Terminals bereit, sondern Ihre Sitzung wird auf dem Server beibehalten, wenn Ihre Verbindung aus irgendeinem Grund abbricht.

Weitere Informationen zum Einstieg in screen finden Sie unter der GNU Screen Survival Guide Frage.

Ich habe normalerweise ein Terminal offen für Source Control-Operationen, eine für die Bearbeitung, eine für die Kompilierung (ich muss nur auf es wechseln und drücken Sie UpArrow + Enter), und eine für das Debuggen. Abhängig von der Umgebung und der Anwendung, an der ich arbeite, kann ich mehr oder weniger als das haben, aber das ist das allgemeine Layout.

+4

'tmux' ist auch ein beliebtes, aktiv entwickeltes' Bildschirm'-ähnliches Programm. –

23

TRAMP unterstützt das Kompilieren und Debuggen auf den Remote-Computern (auf denen sich die Dateien befinden). Dies sollte automatisch und relativ nahtlos sein. Überprüfen Sie die Dokumentation für remote processes.

18

Keine Sorge. Sie können alles in Emacs mit einem einzigen Tastendruck ausführen. Andere haben Möglichkeiten, bemerkt man diese elegant mit TRAMP tun können, aber wenn das nicht passt (warum auch immer), könnten Sie auch nur Ihre eigene Funktion kochen:

(defun arbitrary-remote-command() 
    (interactive) 
    (shell-command 
    "ssh [email protected] arbitrary-command")) 


(global-set-key (kbd "<f5>") 'arbitrary-remote-command) 
1

Sie nicht laufen Angenommen wollen Emacs im Terminal-Modus auf Ihrer Fernbedienung Maschine, dann ist es ziemlich einfach. Wie Sie wissen, können Sie mit TRAMP Remote-Dateien bearbeiten. Ich habe nur kompilieren-Befehl auf 'ssh mich @ remote "cd /Pfad/zu/root & & machen' 'und damit fertig sein.

2

Ich würde nur ssh in die Remote-Maschine und Emacs im Terminal-Modus statt TRAMP verwenden. TRAMP ist wirklich langsam, wenn du keine Langsamkeit erwartest, zumindest nach meiner Erfahrung. Ich habe es auch auf seltsame Weise versagt gesehen, und es ist nicht immer offensichtlich, wie man es "repariert". Wenn Sie sich einloggen, werden Sie nicht in der Lage sein, emacs UI-Sachen zu verwenden, wie die Menüs usw., aber da Sie an vi gewöhnt sind, sollte das kein Problem für Sie sein. In der Tat können Sie sie einfach ausschalten, so dass Ihre ssh Emacs Erfahrung sehr ähnlich zu Ihrer lokalen Erfahrung ist (wenn lokal! = Terminal-Modus) (1).

Die Verwendung des Bildschirms kann nützlich sein, wenn Sie Ihre Sitzung beibehalten möchten, falls die Verbindung abbricht - abgesehen davon erhalten Sie ähnliche Funktionen wie virtuelle Terminals mit Emacs-Puffern. Zum Beispiel können Sie viele Shell-Puffer öffnen und verschiedene Shell-Befehle in Emacs-Puffern ausführen. Ich verwende das, um viele Instanzen von sqlplus auszuführen (benutze rename-buffer, um ihnen alle netten, freundlichen Namen zu geben).

Da Sie in den Remote-Computer ssh'd sind, müssen Sie sich keine Gedanken über das Ausführen von "remote" Shell-Befehlen machen.

Auf der anderen Seite bin ich nicht sicher, was Sie mit "Ich sehe, dass die Einrichtung der Umgebung, um Emacs zu betreiben ist ein langer Weg zu gehen". Wenn Sie Quellcodeverwaltung haben, sollte das trivial sein ... (Ich wette, Sie haben einen guten Grund).

(1) auszuschalten Menü Werkzeugleiste und Bildlaufleisten:

(if (fboundp ‚menu-bar-Modus) (Menü-bar-mode -1))

(if (fboundp 'Werkzeugleiste-Modus) (Tool-Bar-Modus -1))

(if (fboundp' Scroll-Bar-Modus) (Scroll-Bar-Modus -1))

+0

Ich mache derzeit Entwicklung auf diese Weise, aber zum Beispiel, um w3m einzurichten, um Online-Dokumentation zu sehen, brauche ich eine Menge rpm's, um Abhängigkeiten zu installieren und aufzulösen, oder kompiliere cedet (es gibt kein yum). Ein Teil der Entwicklung besteht darin, ein Installationsprogramm auf einem kürzlich formatierten System zu testen, daher wird der Server ab und zu formatiert und ich muss Emcas erneut installieren. Oder ich muss etwas Code auf einem anderen Server ändern, und ich würde auch Emacs installieren müssen. Mit vim gibt es kein Problem, da es "out of the box" ist (zumindest als einfacher Texteditor). – German

-2

Zwei Cent: if Bandbreite ist keine große Sorge, ich würde bei VNC einen Riss geben.

5

Schöne Antwort von Trey Jackson, aber die Antwort von Matthew Flaschen hat mir tatsächlich mehr geholfen.

Ich konnte keinen Weg finden, TRAMP das Kompilieren zu bekommen, aber versehentlich habe ich den Befehl remote-compile gefunden.

Nun füge ich nur diese Zeilen zu meinem .emacs:

(setq remote-compile-user "root") 
(setq remote-compile-host "localhost -p 3000") ;This is just when tunneling 
(setq compile-command " cd /usr/src/nexus/traffic && ./builder.sh compile ; cat builder.log") 
(global-set-key (kbd "<f5>") 'remote-compile) 

Und bevor irgendetwas zu tun, die SSH-Verbindung mit ControlMaster einrichten und ich muss keine Passwörter eingeben.

Summieren:

  • Bearbeiten von Remote-Dateien: TRAMP
  • Mehrere Terminals Sparzustände: SCREEN
  • definieren Emacs keybindings Remote-Befehle auszuführen: Siehe Matthew Flaschen Antwort
  • Remote-Compilierung: Befehl Fernkompilieren mit ControlMaster

Ich denke, dass einige wichtige Maßnahmen zur Remote-Entwicklung umfasst.

+0

Sie können den regulären Befehl "compile" verwenden: Er verwendet automatisch TRAMP, wenn er von einem Remote-Puffer aus ausgeführt wird (zumindest in Emacs 23.2).Ich habe "remote-compile" versucht und es ist kläglich gescheitert: wahrscheinlich, weil es zweimal versucht hat. – MarcH

+0

'rcompile.el (remote-compile)' seit Emacs 24.4 veraltet gemacht. Unter Ubuntu befindet sich 'rcompile.el' im Verzeichnis'/usr/share/emacs//lisp/obsolete/'. – Vivek

1

Ich habe TRAMP zuvor für eine Situation wie deine versucht, aber auch ich fand es auf seltsame Weise versagt und langsam im Allgemeinen.

Ich verwende jetzt Emacs, um Dateien zu bearbeiten, die über einen sshfs-Mount bereitgestellt werden. Das funktioniert sehr gut für mich.

die Remote-Dateisystem einzuhängen (vorausgesetzt, Sie haben die Gastgeber in .ssh/config und eingerichtet öffentliche Schlüssel korrekt eingerichtet ohne Passwort verbinden)

$ sshfs remote:dir localdir 

und bearbeiten, wie Sie von nun an gerne!

Wie zur Kompilierung, sehen Sie die anderen Antworten, sie decken dies vollständig ab.

1

Über Tramp kann es abhängig von Tramp-Version, die Sie verwenden.

Persönlich stieß ich viel Problem mit Standard-Tramp-Paket und plink als Backend auf Remote-Hosts zu verbinden, so habe ich Tramp auf eine neuere Version aktualisiert und zahlreiche Probleme zu lösen.

Eigentlich bin ich auf einem Windows-Rechner Zugriff auf ein Linux (RH5) für Remote-Compiling und Durchsuchen von Verzeichnissen, Lesen/Schreiben von einigen Dateien, Kompilieren auf Remote-Maschine funktioniert gut.

0

Eine Sache, die niemand erwähnt hat, ist das Ausführen von Emacs von der entfernten Maschine mit einer gültigen $ DISPLAY-Variablen, die Ihrer aktuellen Anzeige entspricht.

Offensichtlich müssen Sie einen X-Server für Ihre lokale Anzeige ausführen, aber das ist keine große Sache, selbst unter Windows [verwenden Sie den in Cygwin integrierten X-Server].

Dies erfordert in der Regel Netzwerklatenz < 50ms. Wenn Sie diese Remote-Box anpingen und etwas> 50ms erhalten, werden Sie mit diesem Ansatz frustriert sein.

Darunter, funktioniert gut.

Sie müssen SSH Karte den X-Port haben, es gibt viele Dokumente dort draußen.

0

Was ich seit etwa 1994 verwendet haben:

cat <<-EOF >> ~/.emacs 
(define-key global-map "\e`" 'compile) 
(define-key global-map "\e~" 'remote-compile) 
(require 'compile) 
(setq remote-shell-program "ssh") 
EOF 

Jetzt ESC-`läuft kompilieren und ESC- ~ läuft/remote/kompilieren. Sie werden nach dem Hostnamen gefragt und dann den Befehl vorab ausfüllen. Beide Compilations haben denselben History-Puffer.

Es ist soooo einfach. Es nutzt eine Funktion, die seit Jahrzehnten gleich funktioniert, und es erfordert kein anderes Anheben zum Arbeiten - und es ist nur Text über eine SSH, so dass es über lange oder langsame oder überlastete Links sehr reaktionsschnell und effizient sein wird. Ich habe festgestellt, dass dies Fets of Network Rage ein wenig mehr verhindert.

Verwandte Themen