使用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