Emacs 配置文件迁移

对于Emacs最重要的可能就是.emacs.d这个文件夹了. Windows上面他位于Roaming目录. 在user/AppData下面. 这里面保存了所有自己额外安装的插件, 命令历史记录, 自动保存的副本等等.

一直都用的很好, 但是总是感觉Roaming里面不够安全, 如果重装系统, 这个内容有可能丢失. 但毕竟和操作系统耦合的太紧密, 对于重度用户, 丢失这个目录是很麻烦的, 这意味着, 多年使用过程中累积的工具都会丢失. 所以最好是把它做成绿色版的, portable的, 只要拷贝复制就可以立即原样使用的.

重点是两个东西:.emacs和.emacs.d.

Google了一下, 找到一个方案, 把这个两个文件拷贝出来, 放到自定义的位置, 然后吧.eamcs的内容替换为如下内容.

 
 
(setq bindir "c:/bin")
(setq user-init-file (format "%s%s" bindir "/config/emacs/roaming/.emacs"))
(setq user-emacs-directory (format "%s%s" bindir "/config/emacs/roaming/.emacs.d/"))
;(setq default-directory "C:/whatever/you/want/to/start/in")
(setenv "HOME" (format "%s%s" bindir "/config/emacs/roaming"))
(load user-init-file)
 
 

这样做了之后, 我发现start-server无法工作了, emacsclient无法打开文件. 这种方法的问题在于他没有真正改变HOME目录, 我发现在AppData/Roaming下面还是生成了.emacs.d目录.

其实根本不需要这样, 最简单的方法是移动.emacs和.emacs.d到指定目录然后修改HOME环境变量指向该目录.

 
set HOME=%bindir%\config\emacs\roaming
 

不需要改任何ELISP代码, 一切和原来一样.

下面是我用的启动Emacs的BAT文件

 
@echo off
 
tasklist /fi "imagename eq emacs.exe" | find /i "emacs.exe" > nul
if not errorlevel 1 (
%bindir%\emacs-24.4\bin\emacsclient.exe -n %* ) else (
%bindir%\emacs-24.4\bin\runemacs.exe %*
)

Roaming目录其实只是Emacs的默认HOME目录, 只要改变这个变量, 你可以指定任何位置为HOME目录.