我在为不同公司工作的服务器上有不同的特定于工作的 .emacs 配置文件。由于各种原因,我不想将这些软件包本地存储在我的机器上。有没有办法使用这些远程目录之一启动 emacs,就好像它是本地的一样?
Tramp 非常适合实际编辑远程文件,就好像它们是本地文件一样——现在我希望能够以同样的方式启动整个 emacs 编辑器。
出于好奇,我只是试了一下:
emacs -q --load "/ssh:USER@HOSTNAME:.emacs.d/init.el"
这行得通,但是远程 init.el 正在设置像“~/.emacs.d/vendor/”这样的加载路径,所以真正的 init 文件需要知道它设置的路径和文件名需要相对于一个公共基础. 这个基数可以由一个公共变量设置,所以试试:
emacs -q --eval '(setq init-base "/ssh:USER@HOSTNAME:") (load (concat init-base ".emacs.d/init.el"))'
然后在远程配置中,init-base
添加到它设置的任何应该是远程的路径或文件名。
使用这些远程目录之一启动 emacs,就好像它是本地目录一样
如果服务器是 unix/linux 服务器并且您具有 ssh 访问权限,那么您可以尝试SSH Filesystem。然后您可以将服务器挂载到本地目录,例如:
> sshfs server1: ~/remote/server1
> sshfs server2: ~/remote/server2
然后你可以启动 emacsemacs --no-init-file --load ~/remote/servers2/.emacs
等等。
由于各种原因,我不想在本地存储的包
如果软件包安装在远程机器上的 .emacs.d 中,您可以在本地机器上创建如下脚本:
;; .emacs.server1.el
(add-to-list 'load-path (expand-file-name "~/remote/server1/.emacs.d"))
(add-to-list 'load-path (expand-file-name "~/remote/server1/.emacs.d/package1"))
(load (expand-file-name "~/remote/server1/.emacs"))
然后像这样启动emacs:emacs --no-init-file --load ~/.emacs.server1.el
很明显这个脚本依赖于上面的挂载。
您可能会发现 SO 问题Originate edit of remote file using emacs tramp from ssh session is ask for a solution to a related question。也许那里的答案可能会给您想要的东西,即您可以附加到远程机器上运行的 emacs。