У меня есть крошечный скрипт в моем пути на удаленном хосте ~/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
библиотека относится к этому вопросу? Звучит полезно