12

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

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

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

我不确定我是否足够清楚。我不想在远程机器上运行 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
4

5 回答 5

13

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

于 2010-02-09T19:58:47.567 回答
1

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

结合远程目录跟踪,让流浪者打开远程文件,就好像它是本地的一样

于 2011-03-16T16:10:44.950 回答
0

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

于 2010-02-10T09:52:08.613 回答
0

也许您已经知道这一点并且它对您来说效果不佳,但是当我需要做这种事情时,TRAMP 中的文件名完成已经足够有用了,以至于我从未想过寻找替代品。

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

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

于 2015-09-28T18:21:58.847 回答
0

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

me@remote-machine$ ssh -f me@local-machine emacsclient /ssh:remote-machine/$(realpath my-file-name)
于 2015-10-07T09:01:40.590 回答