Ich habe ein winziges Skript in meinem Pfad auf dem Remote-Host unter ~/bin/ec
, kurz für Emacsclient.
#!/bin/bash
params=()
for p in "$@"; do
if [ "$p" == "-n" ]; then
params+=( "$p" )
elif [ "${p:0:1}" == "+" ]; then
params+=( "$p" )
else
params+=( "/ssh:z:"$(readlink -f $p) )
fi
done
emacsclient --server-file=$HOME/.emacs.d/server/server "${params[@]}"
Dieses Skript übergibt -n
und +
args unverändert an emacsclient. Andernfalls werden args als Dateien behandelt, die Ihr lokaler Emacs öffnen soll. Jeder Datei wird das TRAMP-Protokoll und der Host vorangestellt, damit Emacs weiß, wie man sie öffnet. Möglicherweise können Sie zu ssh:
einem anderen TRAMP-Protokoll wechseln, wenn Sie dies vorziehen.
Sie müssen durch z
den Hostnamen Ihres Remote-Computers ersetzen . Dies wird von lokalen Emacs verwendet, um eine Verbindung über TRAMP herzustellen. (Möglicherweise können Sie dies hostname
hier allgemein verwenden. Ich bevorzuge der Kürze halber winzige Einträge wie z
in meiner ssh_config
Landessprache, und die Fernbedienung hat keine Ahnung, dass ich das mache. Probieren Sie es aus!)
Verwendungszweck:
ec file
in der Remote-Shell öffnet die Datei in lokalem Emacs und wartet
ec -n file
in der Remote-Shell öffnet die Datei in lokalem Emacs und kehrt zurück
export EDITOR=~/bin/ec
In der Ferne .bashrc
geschieht die Magie
Um sicherzustellen, dass meine server
Datei in Ordnung ist, habe ich dies in meinem lokalen .emacs
Verzeichnis wieder unter Verwendung des winzigen Hostnamens z
:
(setq server-use-tcp t
server-port 9999)
(defun server-start-and-copy ()
"Start server and copy server file to remote box."
(interactive)
(server-start)
(copy-file "~/.emacs.d/server/server" "/z:.emacs.d/server/server" t)
(chmod "/z:.emacs.d/server/server" (string-to-number "644" 8))
)
(add-hook 'emacs-startup-hook 'server-start-and-copy)
Port 9999 ist eine RemoteForward. Ich habe dies in mein lokales ~/.ssh/ssh_config
eingefügt, um die Weiterleitung zu automatisieren, und das ControlMaster-Zeug, um die Geschwindigkeit zu erhöhen.
Host z
HostName dev.example.com
User dev
ControlMaster auto
ControlPath ~/.ssh/z.sock
RemoteForward 9999 localhost:9999
Stellen ssh_config
Sie abschließend sicher, dass TRAMP über Ihre Daten informiert ist, wenn Sie diese verwenden:
(require 'tramp)
(tramp-set-completion-function "ssh"
'((tramp-parse-sconfig "~/.ssh/config")))
with-editor
Bibliothek mit der Frage zusammenhängt? Klingt nützlich