Mam mały skrypt na mojej ścieżce na zdalnym hoście w ~/bin/ec
, skrót od 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[@]}"
Skrypt przechodzi -n
i +
argumenty pozostają niezmienione w emacsclient, w przeciwnym razie argumenty są traktowane jako pliki do otwarcia lokalnego Emacsa. Każdy plik ma prefiks protokołu TRAMP i hosta, więc Emacs wie, jak go otworzyć. ssh:
Jeśli wolisz, możesz być w stanie przejść na inny protokół TRAMP.
Musisz zastąpić z
nazwą hosta swojego zdalnego komputera. Jest to wykorzystywane przez lokalnych Emacsa do łączenia się za pośrednictwem TRAMP. (Być może będziesz w stanie używać go hostname
tutaj dla ogólności. Wolę używać małych wpisów jak z
w moim lokalnym ssh_config
dla zwięzłości, a pilot nie ma pojęcia, że to robię. Spróbuj!)
Stosowanie:
ec file
w zdalnej powłoce otwiera plik w lokalnym Emacsie i czeka
ec -n file
w zdalnej powłoce otwiera plik w lokalnym Emacsie i zwraca
export EDITOR=~/bin/ec
na odległość .bashrc
sprawia, że magia się dzieje
Aby upewnić się, że mój server
plik jest dobry, mam to w mojej lokalnej .emacs
, ponownie używając małej nazwy hosta 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 jest zdalnym przekaźnikiem. Umieściłem to w moim lokalnym, ~/.ssh/ssh_config
aby zautomatyzować przekazywanie, a także rzeczy ControlMaster dla szybkości.
Host z
HostName dev.example.com
User dev
ControlMaster auto
ControlPath ~/.ssh/z.sock
RemoteForward 9999 localhost:9999
Na koniec upewnij się, że TRAMP wie o tobie, ssh_config
jeśli go używasz:
(require 'tramp)
(tramp-set-completion-function "ssh"
'((tramp-parse-sconfig "~/.ssh/config")))
with-editor
biblioteka odnosi się do pytania? Brzmi użytecznie