dr_*_*per 12 emacs rsync tramp
我一直在使用emacs tramp进行一些远程开发,发现它很慢.每次保存文件时,完成保存大约需要10秒钟.所以,现在我使用rsync远程传输文件,它运行得更快,大约需要一秒钟加上emacs的本地保存是即时的.在tramp中是否有任何配置选项可以让它像命令行上的rsync一样快地运行?使用tramp而不是rsync有什么好处,即使我看到这样糟糕的表现?
小智 12
虽然可以将tramp配置为使用大量传输方法,但我认为您使用ssh连接到远程服务器.
我相信完成操作所需的大部分时间来自建立连接和身份验证.如果您使用的是足够新版本的OpenSSH,可以通过使用连接共享功能来帮助您,请参阅ssh_config(5)中的ControlMaster.
我建议你试试
ControlMaster auto
看看是否能改善这种情况.
小智 6
如果你正在使用tramp for ssh/scp功能,你会发现打开一个持久的SSH连接会使tramp操作更快:他们将重用现有的连接,而不是每次创建一个新连接,切断了很多加密开销而不影响安全性.请参阅有关SSH ControlMaster功能的这篇文章.
一些答案提到启用ControlMaster以保持持久的 ssh连接打开(这避免了昂贵的连接设置/握手,否则每个Tramp操作都需要ssh),但是你不需要在Emacs之外配置任何东西使用它 - 如果你看一下tramp-methods变量,你会看到现有的方法可以启用ControlMaster.
具体来说,rsyncc和scpc方法.
当然,连接的两端都需要支持ControlMaster(例如Cygwin不能这样做,这对Windows用户来说是一种耻辱*),但我建议将其中一个设置为你的tramp-default-method.
没有持久的连接会使扩展的Tramp使用非常痛苦,但有一个它非常难以使用(在某种程度上,如果连接速度相当快,你几乎可以忘记它正在发生).
在回答问题的最后部分时,是的,有很好的理由使用Tramp而不是手动rsyncing文件.主要的一点是shell命令可以直接在远程服务器上执行,你甚至不必考虑它,因为Emacs会处理细节.
例如,从远程文件缓冲区,M-x shell RET在远程服务器上打开一个shell,以及命令M-x rgrep RET和M-x find-grep-dired RET将在远程服务器上运行find + grep.我相信这通常适用于调用shell命令的函数.
对我来说,这是使用Tramp的充分理由(除非在远程服务器上安装Emacs并使用本地显示器是一种选择,在这种情况下,对于长期使用,我会考虑这样做).
(*)当使用Windows时,我曾经在本地托管Linux VM并在其中运行Emacs(Cygwin提供X显示),这是使用ControlMaster for Tramp 的唯一原因(/sf/answers/213456281/).