【问题标题】:Originate edit of remote file using emacs tramp from ssh session使用来自 ssh 会话的 emacs tramp 对远程文件进行原始编辑
【发布时间】:2011-01-14 23:18:28
【问题描述】:

这可能是一个有点古怪的问题。我使用 tramp 编辑远程文件,但我也打开了几个终端 ssh-ing 到该远程机器以及其他工作(我在 emacs 中运行 ssh shell 时遇到问题)。

经常在终端工作期间我想编辑一些文件,我目前的程序是复制文件名,然后使用 emacs tramp 打开该文件(在搞砸了在 tramp 中获取文件路径之后格式)。这对于快速编辑来说工作量太大,并且在路径处理部分很容易出错。

问题是:我可以在远程 ssh 会话中执行一些命令,获取文件名,将其转换为流浪格式(这是简单的部分),然后运行 ​​local 命令(如 @987654321 @) 以便我可以在本地 emacs 中使用 tramp 编辑远程文件?

我不确定我是否足够清楚。我不想在远程机器上运行 emacs(无论是在终端上还是通过 x 会话),但我确实想从远程提示符将文件发送到我的本地 emacs,如下所示:

user@remote-machien ~/ $ run_local_emacs somefile
# then the file "/ssh:user@remote-machine/:/home/user/somefile" shows up 
# in my local emacs

【问题讨论】:

    标签: emacs ssh tramp


    【解决方案1】:

    您可以将您的 emacs-server 设置为使用 tcp 连接(不仅仅是本地套接字),然后在远程端,告诉 emacsclient 连接到该 tcp 连接:

    在您的 .emacs 中

    (setq server-use-tcp t)
    (setq server-host "name_of_local_machine")
    (server-start)
    

    然后在远端:

    emacsclient -f ~/.emacs.d/server/server /`hostname`:/path/to/local/file
    

    上面对emacsclient 的调用会在“本地”机器上运行的Emacs 中的“远程”机器上生成一个本地文件。显然,您可以将对emacsclient 的调用封装在任何您想让它更容易的脚本中。

    如果您的主目录在远程计算机上不可见,您将需要 像这样自定义server-auth-dir 变量:

    (setq server-auth-dir "/some/path/visible/on/both/machines")
    

    有关更多文档,请参阅Emacsclient options

    【讨论】:

    • 所以我也应该在远程机器上启动一个服务器?在远程机器上(在 ssh 上)运行 emacsclient 时出现错误:“emacsclient: error access server file "~/.emacs.d/server/server"
    • @polyglot 不,您不会在远程计算机上启动服务器(这是您要避免的)。服务器文件的路径必须对两台机器可见,才能正常工作。如果那是不可能的......你也许可以通过复制服务器文件而逃脱 - 这不是那么透明。
    • 啊,现在可以了。我确实复制了服务器文件,但出现了一些权限错误;现在可以了!
    • 我已经发布了一些 emacs lisp scp 的服务器文件并自动设置其他部分:snarfed.org/emacsclient_in_tramp_remote_shells
    • 如果您正在编辑的机器无法远程访问(例如,我的笔记本电脑无法访问),那么设置 ssh 隧道会有所帮助:如果您正在 ssh-ing 到远程机器,尝试将 -R 50000:127.0.0.1:50000 添加到您的 ssh 命令...其中 '50000' 替换为来自 ~/.emacs.d/server/server 的端口('127.0.0.1:' 之后的部分. 您可以让 emacs 始终使用相同的端口;请参阅 here - 尽管它需要破解您的 emacs 安装(不仅仅是 .emacs)。
    【解决方案2】:

    即使远程计算机上没有安装 emacsclient,您也可以使用 urxvt(一个出色的终端仿真器)并编写一个 perl 扩展来执行此操作。

    【讨论】:

      【解决方案3】:

      还有http://www.emacswiki.org/emacs/AnsiTermHints#toc4

      包含远程目录跟踪功能,可以像打开本地文件一样打开远程文件

      【讨论】:

        【解决方案4】:

        也许您已经知道这一点,但它并不适合您,但是当我需要做这种事情时,TRAMP 中的 文件名完成 已经很有帮助了,我'我从没想过寻找替代品。

        C-xC-f/ssh:remotehost:/TabTab

        当您设置了 SSH 密钥或类似的无密码访问时,这种方法效果最好,但听起来您已经拥有了。

        【讨论】:

          【解决方案5】:

          我在这里做的是从远程到本地的反向 ssh 连接并在本地运行 emacsclient:

          me@remote-machine$ ssh -f me@local-machine emacsclient /ssh:remote-machine/$(realpath my-file-name)
          

          【讨论】:

            猜你喜欢
            • 2013-04-03
            • 1970-01-01
            • 2013-10-17
            • 2011-12-20
            • 1970-01-01
            • 2010-09-13
            • 1970-01-01
            • 2011-12-11
            • 1970-01-01
            相关资源
            最近更新 更多