使用emacs的用戶都知道,通常要打開遠程機器上的文件要使用TrampMode模式,調用方式例如如下:python
C-x C-f /remotehost:filename RET (or /method:user@remotehost:filename)
emacs提供了一種client/server的模式,當咱們在本地打開一個emacs,可以將它做爲server執行bash
而後,在本地機器的其它都方要用emacs的時候,如在terminal中要調用emacs,僅僅需要使用emacsclient就可以了.ssh
我但願的情形是這種:tcp
1. 把本地機器的emacs當成一個serverwordpress
2. 用ssh登陸一臺遠程機器post
3. 在遠程機器上使用emacsclient 調用本地的emacs serverui
4. 而後,咱們就可以在本地機器上編輯遠程機器上的文件了code
在網上找了一我的給出的解決方法,連接 (牆外),現把步驟整理例如如下:server
注:這裏我遠程機器HOST名爲:yoks 登陸的username爲:lispblog
1. 設置Port Forwarding(或者稱爲SSH Tunneling),編輯本都機器的 ~/.ssh/config 增長下面內容
Host yoks User lisp ControlMaster auto ControlPath ~/.ssh/yoks.sock RemoteForward 9999 localhost:9999
2. 配製本地機器的emacs,將下面代碼增長到你的emacs配製文件(.emacs 或 init.el)中
(setq server-use-tcp t server-port 9999) (require 'server) (defun server-start-and-copy () "start server and copy auth files" (when (and (fboundp 'server-running-p) ; function exists. (not (server-running-p))) (server-start) ; emacs as server mode (when (file-exists-p "/lisp@yoks:~/.emacs.d/server/server") (delete-file "/lisp@yoks:~/.emacs.d/server/server")) (copy-file "~/.emacs.d/server/server" "/lisp@yoks:~/.emacs.d/server/server") )) (add-hook 'emacs-startup-hook 'server-start-and-copy)
同一時候在本地機器上從新啓動emacs
3. 在遠程機器上編輯一個下面腳本,名字爲 ec, 並增長可運行權限
#!/bin/bash params=() for p in "$@"; do if [ "$p" == "-n" ]; then params+=( "$p" ) elif [ "${p:0:1}" == "+" ]; then params+=( "$p" ) else params+=( "/ssh:yoks:"$(readlink -f $p) ) fi done emacsclient "${params[@]}"
本地的emacs截圖例如如下,這樣就方便在本地機器上編輯這個文件了
可以看到它的地址爲: /ssh:yoks:/home/lisp 這個地址和咱們用TRAMP模式打開的如出一轍.
注意:個人機器環境爲Linux