• 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

  • 相关阅读:
    Css实现漂亮的滚动条样式
    清除浮动的方式有哪些?比较好的是哪一种?
    Cookie、sessionStorage、localStorage的区别
    http和https的区别?
    git 拉取分支切换分支
    css 三角形
    js中??和?.的意思
    js this指向
    tsconfig.json配置
    查看本地安装的所有npm包
  • 原文地址:https://www.cnblogs.com/llguanli/p/6979979.html
Copyright © 2020-2023  润新知