Saya memiliki skrip kecil di jalur saya di host jarak jauh di ~/bin/ec
, singkatan untuk 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[@]}"
Script ini lolos -n
dan +
args tidak berubah menjadi emacsclient, jika tidak args diperlakukan sebagai file untuk dibuka oleh Emacs lokal Anda. Setiap file diawali dengan protokol TRAMP dan host sehingga Emacs tahu cara membukanya. Anda mungkin dapat mengubah ssh:
ke protokol TRAMP yang berbeda jika Anda mau.
Anda harus mengganti z
dengan nama host mesin jarak jauh Anda. Ini digunakan oleh Emacs lokal untuk terhubung melalui TRAMP. (Anda mungkin dapat menggunakan di hostname
sini untuk umum. Saya lebih suka menggunakan entri kecil seperti z
di lokal saya ssh_config
untuk singkatnya, dan remote tidak tahu saya melakukan ini. Cobalah!)
Pemakaian:
ec file
di shell jauh membuka file di Emacs lokal dan menunggu
ec -n file
di shell jauh membuka file di Emacs lokal dan kembali
export EDITOR=~/bin/ec
di jarak jauh .bashrc
membuat keajaiban terjadi
Untuk memastikan server
file saya bagus saya punya ini di lokal saya .emacs
, lagi menggunakan nama host kecil 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 adalah RemoteForward. Saya menempatkan ini di lokal saya ~/.ssh/ssh_config
untuk mengotomatiskan penerusan, ditambah hal-hal ControlMaster untuk kecepatan.
Host z
HostName dev.example.com
User dev
ControlMaster auto
ControlPath ~/.ssh/z.sock
RemoteForward 9999 localhost:9999
Akhirnya, pastikan TRAMP tahu tentang Anda ssh_config
jika Anda menggunakannya:
(require 'tramp)
(tramp-set-completion-function "ssh"
'((tramp-parse-sconfig "~/.ssh/config")))
with-editor
perpustakaan ini berhubungan dengan pertanyaan? Kedengarannya bermanfaat