Tôi có một đoạn script nhỏ trong đường dẫn của tôi trên máy chủ từ xa ~/bin/ec
, tốc ký cho 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[@]}"
Kịch bản lệnh này chuyển -n
và lập luận +
không thay đổi thành emacsclient, nếu không thì các đối số được coi là các tệp để Emacs cục bộ của bạn mở. Mỗi tệp có tiền tố với giao thức TRAMP và máy chủ lưu trữ để Emacs biết cách mở nó. Bạn có thể thay đổi ssh:
sang một giao thức TRAMP khác nếu muốn.
Bạn phải thay thế z
bằng tên máy chủ của máy từ xa. Điều này được sử dụng bởi Emacs cục bộ để kết nối thông qua TRAMP. (Bạn có thể có thể sử dụng hostname
vào đây để tính tổng quát. Tôi thích sử dụng các mục nhỏ như z
trong địa phương của tôi ssh_config
cho ngắn gọn, và điều khiển từ xa không có ý tưởng tôi đang làm điều này. Hãy thử nó!)
Sử dụng:
ec file
trong shell từ xa mở tập tin trong Emacs cục bộ và chờ đợi
ec -n file
trong shell từ xa mở tập tin trong Emacs cục bộ và trả về
export EDITOR=~/bin/ec
ở xa .bashrc
làm cho phép thuật xảy ra
Để đảm bảo server
tệp của tôi tốt, tôi có tệp này trong địa phương của mình .emacs
, một lần nữa sử dụng tên máy chủ nhỏ 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)
Cổng 9999 là RemoteForward. Tôi đặt cái này ở địa phương ~/.ssh/ssh_config
để tự động chuyển tiếp, cộng với công cụ ControlMaster cho tốc độ.
Host z
HostName dev.example.com
User dev
ControlMaster auto
ControlPath ~/.ssh/z.sock
RemoteForward 9999 localhost:9999
Cuối cùng, hãy đảm bảo TRAMP biết về bạn ssh_config
nếu bạn sử dụng nó:
(require 'tramp)
(tramp-set-completion-function "ssh"
'((tramp-parse-sconfig "~/.ssh/config")))
with-editor
thư viện này liên quan đến câu hỏi? Âm thanh hữu ích