7

我在为不同公司工作的服务器上有不同的特定于工作的 .emacs 配置文件。由于各种原因,我不想将这些软件包本地存储在我的机器上。有没有办法使用这些远程目录之一启动 emacs,就好像它是本地的一样?

Tramp 非常适合实际编辑远程文件,就好像它们是本地文件一样——现在我希望能够以同样的方式启动整个 emacs 编辑器。

4

3 回答 3

7

出于好奇,我只是试了一下:

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添加到它设置的任何应该是远程的路径或文件名。

于 2012-10-25T01:25:04.253 回答
4

使用这些远程目录之一启动 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

很明显这个脚本依赖于上面的挂载。

于 2010-12-04T08:32:37.400 回答
2

您可能会发现 SO 问题Originate edit of remote file using emacs tramp from ssh session is ask for a solution to a related question。也许那里的答案可能会给您想要的东西,即您可以附加到远程机器上运行的 emacs。

于 2010-12-04T17:47:29.427 回答