emacs使用本地emacs server模式打开远程文件
使用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模式打开远程文件的更多相关文章
- PHP文件操作 之打开远程文件
//配置php.ini 开启allow_url_fopen选项 //访问的文件有可读或者可写的权限 //$f = fopen('http://www.example.com/a.txt','rb'); ...
- SQL Server 无法打开物理文件的 2 种解决办法
解决方法: 方法1.无法打开可以能是没有权限.如果是这样以管理员身份运行Managerment Studio就可以了. 方法2.找到指定的数据库文件.右键属性-->安全-->勾上 ‘完全 ...
- sublime sftp 打开远程文件夹
2014-04-29 13:19:09 总结: 本文介绍两种方法,推荐第二种方法(samba+windows映射) 先贴出sublime打开远程(Linux)目录所需的配置文件(sublime是通过s ...
- SQL Server无法打开物理文件,操作系统错误 5:"5(拒绝访问。)的解决办法
在新装的系统中使用SQL Server附加以前的数据库的时候可能会遇到“无法打开物理文件,拒绝访问”的错误,如下图: 解决方法为使用windows验证登录,或者更改SQL Server内置账户类型为L ...
- 编写函数,以读模式打开一个文件,将其内容读入到一个string的vector中,将每一行作为一个对立的元素存于vector中
#include<iostream> #include<string> #include<vector> #include<fstream> using ...
- fseek 在以字符串模式打开的文件中工作不正常 [MSDN]
For streams opened in text mode, fseek and _fseeki64 have limited use, because carriage return-linef ...
- C# 备份、还原、拷贝远程文件夹
最近一直都很忙,非常抱歉好久没有写过博客了.最近遇到拷贝远程文件的一些工作,比如我们发布的web站点的时候,开发提供一个zip压缩包,我们需要上传到远程的服务器A,然后在部署(文件拷贝)到远程环境B和 ...
- php file_get_contents fopen 连接远程文件
使用file_get_contents和fopen必须空间开启allow_url_fopen. 方法: 编辑php.ini,设置allow_url_fopen =true On,allow_url_f ...
- PHP读取远程文件的三种方法
file_get_contents <?php$url = http://www.xxx.com/;$contents = file_get_contents($url);//如果出现中文乱码使 ...
随机推荐
- Spring整合JUnit4测试使用注解引入多个配置文件
转自:https://kanpiaoxue.iteye.com/blog/2151903 我们使用spring写junit单测的时候,有的时候我们的spring配置文件只有一个.我们在类的注释上面会这 ...
- BZOJ 4491 分块OR差分+线段树
思路: (是不是只有我作大死写了个分块) up[i][j]表示从第i块开始到第j个位置 上升的最大值 down[i][j]同理 left_up[i]表示从第i块开始能够上升的最长长度 left_dow ...
- arg max f(x) 含义
y = f(x) 是一般常见的函数式,如果给定一个x值,f(x)函数式会赋一个值給y. y = max f(x) 代表:y 是f(x)函式所有的值中最大的output. y = arg max f(x ...
- Android网络编程随想录(1)
本系列文章对整个Android网络编程进行了总结,包括基本的TCP/IP协议,HTTP协议,HTTPS协议,HttpClient,UrlConnection,一些网络通信的库到棉花糖新加入的OKHTT ...
- 如何用PYTHON代码写出音乐
什么是MIDI 博主本人虽然五音不全,而且唱歌还很难听,但是还是非常喜欢听歌的.我一直在做这样的尝试,就是通过人工智能算法实现机器自动的作词和编曲(在这里预告下,通过深度学习写歌词已经实现了,之后会分 ...
- 【技术累积】【点】【java】【9】Optional
基础概念 java8引入的,java9有加强 Google公司出品 旨在更好的处理NullPointException 创建Optional实例和基础使用 Optional op1 = Optiona ...
- Nuget包含css\js等资源文件
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netst ...
- POJ 2486 Apple Tree (树形dp 经典题)
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const ...
- Php+Redis队列原理
我们新建一个文件queue.php <?php while(true){ echo 1; sleep(1); } 然后中 命令行里面 执行 php queue 你会发现每秒钟输出一个1:等了很久 ...
- jmeter图片的下载
1.jmeter下载文件 首先添加一个线程组,然后在线程组里面添加一个http请求,因为是获取数据,所有是get请求,写好下载的地址 1.添加线程组 :右键测试计划,添加-Threads(Users) ...