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目录.