这可能是一个有点不合时宜的问题。我使用tramp来编辑远程文件,但是我也打开了几个终端ssh-ing到那个远程机器以及其他工作(我在emacs中运行ssh shell时遇到了问题)。
通常在终端工作期间我想编辑一些文件,而我当前的程序是复制文件名,然后使用emacs tramp打开该文件(在使用tramp中的文件路径搞乱之后)格式)。这对于快速编辑来说太多了,并且在路径处理部分中容易出错。
问题是:我可以在远程ssh会话中执行一些带有文件名的命令,将其转换为tramp格式(这是简单的部分),然后运行 local 命令(如{{ 1}})这样我就可以在本地emacs中使用tramp编辑远程文件了吗?
我不确定我是否足够清楚。我不想在远程计算机上运行emacs(在终端上或通过x会话),但我确实想从远程提示符向本地emacs发送文件,如下所示:
emacsclient blahblahblah
答案 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)