emacs使用本地emacs server模式打开远程文件

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

C-x C-f /remotehost:filename  RET (or /method:[email protected]: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 "/[email protected]:~/.emacs.d/server/server")
      (delete-file "/[email protected]:~/.emacs.d/server/server"))
    (copy-file "~/.emacs.d/server/server" "/[email protected]:~/.emacs.d/server/server")
    ))
(add-hook ‘emacs-startup-hook ‘server-start-and-copy)

这里一方面启动emacs server模式,将其tcpport设置为9999. 然后将server文件复制到远程机器([email protected])上

同一时候在本地机器上重新启动emacs

3. 在远程机器上编辑一个下面脚本,名字为 ec, 并增加可运行权限

#!/bin/bash

params=()
for p in "[email protected]"; 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截图例如以下,这样就方便在本地机器上编辑这个文件了

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

注意:我的机器环境为Linux

时间: 2024-11-08 18:53:33

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

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

//配置php.ini 开启allow_url_fopen选项 //访问的文件有可读或者可写的权限 //$f = fopen('http://www.example.com/a.txt','rb'); //$f = fopen('http://www.example.com/a.txt','wb'); //fread($f,'读取的长度'); //访问远程文件 //打开远程文件 $f = fopen('http://www.baidu.com', rb); //判断打开文件是否成功 if (!$

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

#include<iostream> #include<string> #include<vector> #include<fstream> using namespace std; int main(int argc,char *argv[]) { ifstream input(argv[1]); vector<string> vec; string tmp; while(getline(input,tmp)) { vec.push_back(

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

在新装的系统中使用SQL Server附加以前的数据库的时候可能会遇到“无法打开物理文件,拒绝访问”的错误,如下图: 解决方法为使用windows验证登录,或者更改SQL Server内置账户类型为Local System. 以SQL Server 2008 R2为例,更改方法为:开始→所有程序→Microsoft SQL Server 2008 R2→配置工具→SQL Server 配置管理器. 打开SQL Server 配置管理器后点击左侧的SQL Server服务,在右侧找到SQL Ser

PHP打开远程文件的风险

PHP有一个配置选项叫allow_url_fopen,威尼斯人赌场该选项默认是有效的.它允许你指向许多类型的资源,并像本地文件一样处理.例如,通过读取URL你可以取得某一个页面的内容(HTML): <?php $contents = file_get_contents('http://www.nowamagic.net/'); ?> 当被污染数据用于include和require的文件指向时,会产生严重漏洞.实际上,我认为这种漏洞是PHP应用中最危险的漏洞之一,这是因为它允许攻击者执行任意代码

C# winform以阅览模式打开PPT,并控制PPT上下页,轮播

[DllImport("user32.dll")] public extern static int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount); /// <summary> /// 打开ppt文件 /// </summary> /// <param name="filePath">路径</param> /// <return

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

最近一直都很忙,非常抱歉好久没有写过博客了.最近遇到拷贝远程文件的一些工作,比如我们发布的web站点的时候,开发提供一个zip压缩包,我们需要上传到远程的服务器A,然后在部署(文件拷贝)到远程环境B和C,ABC都在一个局域网里面. 首先我们需要一个工具类来转换文件路径,本地地址与远程地址的转换 比如192.168.0.1上的D:\test 转换 为\\192.168.0.1\D$\test,文件路径的拼接, public class PathUtil { public static string

使用SecueCRT在本地主机与远程主机之间交互文件

名词解释 本地主机:运行SecueCRT,以管理远程Linux或Unix的机器(一般为Windows系统) 远程主机:被SecueCRT进行管理控制的机器(一般为Linux或Unix) 1.开启SFTP 2.sftp主要命令介绍 序号 命令 用途 1 ascii 设定传输模式为ascii 2 binary 设定传输模式为binary 3 cd 改变无程目录 4 detail 显示远程目录的详细信息 5 ldetai 显示本地目录的详细信息 6 ls 显示远程文件或目录清单 7 lls 显示本地文

linux mini模式下如何制作本地yum源,并用远程工具安装 vim

linux mini模式下如何制作本地yum源,并用远程工具安装 vim 打开虚拟机 启动centos 系统 点右下角的光盘图标 出现连接(或是断开).设置,下拉菜单,选择 "设置" 在虚拟机设置对话框内如图所示 [[email protected] ~]# vim -bash: /usr/bin/vim: 没有那个文件或目录 光盘挂载: 查看系统中所有的挂载信息 [[email protected] ~]# mount /dev/sda3 on / type ext4 (rw) pr

windows下使用emacs+plink编辑远程文件

1)plink.exe属于putty套件, 注册到环境变量;emacs的bin目录也要注册到环境变量中; 2)在.emacs中增加如下: (require 'tramp)(setq tramp-default-method "plink") ;; 这样在emacs的minibuffer中C-x C-f之后就不必再输入/plink:(byte-compile-file "E:/tools/emacs-24.3/lisp/net/tramp-sh.el") ;; 避免错