使用来自ssh会话的emacs tramp来编辑远程文件

时间:2010-02-09 19:32:18

标签: emacs ssh tramp

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

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

问题是:我可以在远程ssh会话中执行一些带有文件名的命令,将其转换为tramp格式(这是简单的部分),然后运行 local 命令(如{{ 1}})这样我就可以在本地emacs中使用tramp编辑远程文件了吗?

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

emacsclient blahblahblah

5 个答案:

答案 0 :(得分:12)

您可以将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

答案 1 :(得分:1)

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

合并远程目录跟踪,让tramp打开远程文件,就像它是本地

一样

答案 2 :(得分:0)

即使远程计算机上未安装emacsclient,您也可以使用urxvt(一个优秀的终端模拟器)并编写perl扩展来执行此操作。

答案 3 :(得分:0)

也许你已经知道了这一点并且对你来说效果不好,但是当我需要做那种事情时,TRAMP中的文件名完成对我有用了我从没想过要寻找替代品。

C-X C-F /ssh:remotehost:/ 标签 标签

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

答案 4 :(得分:0)

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

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