使用emacs的用户都知道,一般要打开远程机器上的文件要使用TrampMode模式,调用方式例如以下:

C-x C-f /remotehost:filename  RET (or /method:user@remotehost:filename)

但,这样打开有点麻烦,你必要输入username和机器ip等

emacs提供了一种client/server的模式,当我们在本地打开一个emacs,能够将它作为server执行

然后,在本地机器的其它都方要用emacs的时候,如在terminal中要调用emacs,仅仅须要使用emacsclient就能够了.

我希望的情形是这种:

1. 把本地机器的emacs当成一个server

2. 用ssh登录一台远程机器

3. 在远程机器上使用emacsclient 调用本地的emacs server

4. 然后,我们就能够在本地机器上编辑远程机器上的文件了

在网上找了一个人给出的解决方法,链接 (墙外),现把步骤整理例如以下:

注:这里我远程机器HOST名为:yoks 登录的username为:lisp

1. 设置Port Forwarding(或者称为SSH Tunneling),编辑本都机器的 ~/.ssh/config 增加下面内容

Host yoks
User lisp
ControlMaster auto
ControlPath ~/.ssh/yoks.sock
RemoteForward 9999 localhost:9999

这里将本地的9999port与远程的9999port进行影射(map)

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 server模式,将其tcpport设置为9999. 然后将server文件复制到远程机器(lisp@yoks)上

同一时候在本地机器上重新启动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[@]}"

4. 用ssh登录远程机器,然后用ec打开一个文件,我们发现,文件内容出如今了本地机器的emacs中了,例如以下:

本地的emacs截图例如以下,这样就方便在本地机器上编辑这个文件了

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZWFib3Ju/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

能够看到它的地址为: /ssh:yoks:/home/lisp 这个地址和我们用TRAMP模式打开的一模一样.

注意:我的机器环境为Linux

emacs使用本地emacs server模式打开远程文件的更多相关文章

  1. PHP文件操作 之打开远程文件

    //配置php.ini 开启allow_url_fopen选项 //访问的文件有可读或者可写的权限 //$f = fopen('http://www.example.com/a.txt','rb'); ...

  2. SQL Server 无法打开物理文件的 2 种解决办法

    解决方法: 方法1.无法打开可以能是没有权限.如果是这样以管理员身份运行Managerment Studio就可以了. 方法2.找到指定的数据库文件.右键属性-->安全-->勾上  ‘完全 ...

  3. sublime sftp 打开远程文件夹

    2014-04-29 13:19:09 总结: 本文介绍两种方法,推荐第二种方法(samba+windows映射) 先贴出sublime打开远程(Linux)目录所需的配置文件(sublime是通过s ...

  4. SQL Server无法打开物理文件,操作系统错误 5:"5(拒绝访问。)的解决办法

    在新装的系统中使用SQL Server附加以前的数据库的时候可能会遇到“无法打开物理文件,拒绝访问”的错误,如下图: 解决方法为使用windows验证登录,或者更改SQL Server内置账户类型为L ...

  5. 编写函数,以读模式打开一个文件,将其内容读入到一个string的vector中,将每一行作为一个对立的元素存于vector中

    #include<iostream> #include<string> #include<vector> #include<fstream> using ...

  6. fseek 在以字符串模式打开的文件中工作不正常 [MSDN]

    For streams opened in text mode, fseek and _fseeki64 have limited use, because carriage return-linef ...

  7. C# 备份、还原、拷贝远程文件夹

    最近一直都很忙,非常抱歉好久没有写过博客了.最近遇到拷贝远程文件的一些工作,比如我们发布的web站点的时候,开发提供一个zip压缩包,我们需要上传到远程的服务器A,然后在部署(文件拷贝)到远程环境B和 ...

  8. php file_get_contents fopen 连接远程文件

    使用file_get_contents和fopen必须空间开启allow_url_fopen. 方法: 编辑php.ini,设置allow_url_fopen =true On,allow_url_f ...

  9. PHP读取远程文件的三种方法

    file_get_contents <?php$url = http://www.xxx.com/;$contents = file_get_contents($url);//如果出现中文乱码使 ...

随机推荐

  1. 建模:3D建模

    ylbtech-建模:3D建模 “3D建模”通俗来讲就是通过三维制作软件通过虚拟三维空间构建出具有三维数据的模型.3D建模大概可分为:NURBS和多边形网格. NURBS对要求精细.弹性与复杂的模型有 ...

  2. 智能识别收货地址 javascript

    欢迎加入前端交流群交流知识&&获取视频资料:749539640 地址: https://github.com/wzc570738205/smart_parse

  3. 两道人数多,课程少,query多的题

    #每天进步一点点# 来两道很相似的题目~ (智商啊智商.....) hihoCoder #1236:Scores (简单的分桶法+bitset) 2015 Beijing Online的最后一题.题目 ...

  4. hihoCoder-1828 2018亚洲区预选赛北京赛站网络赛 A.Saving Tang Monk II BFS

    题面 题意:N*M的网格图里,有起点S,终点T,然后有'.'表示一般房间,'#'表示毒气房间,进入毒气房间要消耗一个氧气瓶,而且要多停留一分钟,'B'表示放氧气瓶的房间,每次进入可以获得一个氧气瓶,最 ...

  5. [Offer收割]编程练习赛36

    逃离单身节 #include<stdio.h> #include<string.h> #include<stdlib.h> #include<vector&g ...

  6. Boost1.67编译+CMake Generate时遇到的一个错误

    下载的一个库编译时依赖boost,记录一下boost的编译: 下载源码 vs命令行里cd到根目录,运行bootstrap.bat,发现多了几个文件{b2.exe.bjam.exe.project-co ...

  7. -1.#IND000 &&图像类型转换

    (1):float acos(float x) 参数x的范围为-1.0f到1.0f之间,返回值范围在0.0f到3.141592653f之间,值得注意的是:当x超出[-1.0f,1.0f]这个范围时此函 ...

  8. SVN冲突出现原因及解决方法浅谈

    缘由 很简单,用svn合base,出现了各种各样奇怪的问题,虽然最终没有造成什么大的线上问题,但过程也是曲折的,耗费个人精力,也占用他人资源,不好不好,一点都不佛系. 究其原因,还是对为什么出现各种冲 ...

  9. Memory management in RxSwift – DisposeBag

    I’ve noticed a lot of beginners in RxSwift ask about DisposeBag. DisposeBag isn’t a standard thing i ...

  10. Intellij IDEA中Mybatis Mapper自动注入警告的6种解决方案

    点关注,不迷路:持续更新Java架构相关技术及资讯热文!!! 相信使用Mybaits的小伙伴们一定会经常编写类似如下的代码: 可以看到 userMapper 下有个红色警告.虽然代码本身并没有问题,能 ...