emacs-用tramp-rpc加速tramp
1. Tramp是什么
Tramp 使用指南 :
Tramp 是 Emacs 中用来编辑远端文件的模块,全称为『Transparent Remote (file) Access, Multiple Protocol』,类似与 VSCode 的 Remote Development,只不过比它年长 20 岁而已 。
比VSCode的远程部署更年长,所以采用的技术方案也与vscode不同,不需要在远程机器部署二进制包,而是通过ssh等多种协议访问远程文件。也正因如此,在一些时候响应速度令人发指,往往会让人觉得emacs被卡死了(可能事实也确实是卡死在等待数据中)。
正好,tramp-rpc包通过采取与vscode相同的技术,通过在远程服务器上部署一个RUST编写的二进制文件,提升tramp的响应速度:
概述
传统的 TRAMP 通过 SSH 管道传输 shell 命令并解析其输出。这种方式虽然稳健但速度较慢,尤其对于需要多次往返的操作(如目录列表或版本控制操作)。
TRAMP-RPC 采用在远程主机上运行的轻量级 Rust 服务器来替代传统方式。Emacs 通过 SSH 使用 MessagePack-RPC 与其通信,从而显著提升文件操作速度。
2. tramp-rpc配置
首先我们启用 tramp 和 tramp-rpc 。由于 tramp-rpc 还未上melpa,因此这里通过emacs30以后内置的 :vc 方式下载:
(use-package tramp)
(use-package tramp-rpc
:after tramp :demand t
:vc (:url "git@github.com:ArthurHeymans/emacs-tramp-rpc.git"
:rev :newest
:lisp-dir "lisp")
这里通过替换github链接,实现无代理加速下载二进制包
:custom
(tramp-rpc-deploy-release-url-format "https://gh-proxy.org/https://github.com/%s/releases/download/v%s/%s")
这里设置默认方式为 rpc ,使我们可以在 C-x C-f 后通过 /-: 来替代 /rpc:
:config
(setq tramp-default-method "rpc")
根据这个issue,「ControlMaster 选项仅适用于 UNIX/Linux 系统」,所以我们在Windows使用时需要禁用它。
(when (eq system-type 'windows-nt)
(setq tramp-rpc-use-controlmaster nil)))
通过下列变量设置,将tramp文件挪出我的.emacs.d(因为我在用git同步整个.emacs.d文件夹)
(setq tramp-persistency-file-name "~/emacs-local/tramp")
3. 操作说明
4. 配置文件
(files--ensure-directory my/desktop-path)
(let ((file "tramp-rpc-config.txt"))
(org-babel-tangle-file (buffer-file-name) (concat my/desktop-path file) "elisp")
(format "[[https://blog.prayhand13013.top/%s][一键查看上述配置代码汇总]]" file))