ฉันมีสคริปต์เล็ก ๆ ในเส้นทางของฉันบนโฮสต์ระยะไกลที่~/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
และ+
args ไม่เปลี่ยนแปลงเป็น emacsclient มิฉะนั้น args จะถือว่าเป็นไฟล์เพื่อให้ 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
ห้องสมุดนี้เกี่ยวข้องกับคำถามได้หรือไม่ เสียงมีประโยชน์