zoukankan      html  css  js  c++  java
  • 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截图例如以下,这样就方便在本地机器上编辑这个文件了


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


    注意:我的机器环境为Linux

  • 相关阅读:
    SQL Server 阻止了对组件 'Ole Automation Procedures' 的 过程'sys.sp_OACreate' 的访问
    谷歌浏览器扩展程序manifest.json参数详解
    获取天气api
    UVA 10385 Duathlon
    UVA 10668 Expanding Rods
    UVALIVE 3891 The Teacher's Side of Math
    UVA 11149 Power of Matrix
    UVA 10655 Contemplation! Algebra
    UVA 11210 Chinese Mahjong
    UVA 11384 Help is needed for Dexter
  • 原文地址:https://www.cnblogs.com/llguanli/p/6979979.html
Copyright © 2011-2022 走看看