У мене є крихітний сценарій на моєму шляху на віддаленому хості в ~/bin/ec
, скорочення для 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[@]}"
Цей скрипт передається -n
і +
аргументується незмінним до emacsclient, інакше аргументи розглядаються як файли для відкриття локального Emacs. Кожен файл є префіксом протоколу TRAMP і хостом, тому Emacs знає, як його відкрити. Можливо, ви зможете перейти ssh:
на інший протокол TRAMP, якщо хочете.
Ви повинні замінити z
ім'я хоста віддаленої машини. Це використовується місцевим Emacs для підключення через TRAMP. (Ви можете використати hostname
тут для загальності. Я віддаю перевагу коротким записам, як z
у моїх місцевих, ssh_config
для стислості, а пульт не має уявлення, я це роблю. Спробуйте!)
Використання:
ec file
у віддаленій оболонці відкривається файл у локальному Emacs та чекає
ec -n file
у віддаленій оболонці відкривається файл у локальному Emacs та повертається
export EDITOR=~/bin/ec
у віддаленому .bashrc
відтворює магію
Щоб мій server
файл був хорошим, я маю це в моєму локальному .emacs
регіоні, знову використовуючи крихітне ім’я хоста 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)
Порт 9999 - RemoteForward. Я поклав це в моє місцеве місце ~/.ssh/ssh_config
для автоматизації переадресації, плюс речі ControlMaster для швидкості.
Host z
HostName dev.example.com
User dev
ControlMaster auto
ControlPath ~/.ssh/z.sock
RemoteForward 9999 localhost:9999
Нарешті, переконайтеся, що TRAMP знає про ваше, ssh_config
якщо ви використовуєте його:
(require 'tramp)
(tramp-set-completion-function "ssh"
'((tramp-parse-sconfig "~/.ssh/config")))
with-editor
бібліотека стосується питання? Звучить корисно