如果你有 Windows,Linux 等多台机器,你可能要试着在多台机器间同步你的 Emacs 配置文件,这样才用得爽嘛!我就是这样,采用下面的步骤就可以实现此目的:

1) 尽量把与本地路径相关的东西放到 .emacs 文件,而把其它通用的内容放到其它 el 文件里

我用 svn 管理我的 Emacs 配置文件,扩展的 el 文件我也保存到 SVN 里面,这样,随便到哪台机器上只要把配置文件 check out 出来,就可以使用了。

当然,在不同的机器上,会面临字体、文件路径等问题,这时,需要根据各台机器的实际情况,单独配置一下。

可以用 (system-type) 来识别当前机器的操作系统版本,同样,你也可以根据更多的属性,如用户名等来判断配置文件应该设置哪些参数。

如果对于多台同样类型的机器,你也可以根据 (system-name) 来判断一下你的 Emacs 所在路径。

这两种方法性质类似,完全可以根据自己的属性灵活选用这两种识别机器的方法。

当要在 Window 或是 Linux 机器上识别、配置不同的代码的时,可以参考下面的例子代码:

;;如果是 Windows 平台,则进行如下设置
(if (eq system-type 'windows-nt)
            ;;current system is Windows, do some specific setting for Windows
            ;;(message "Current system is Windows")
            ;;use Cygwin as bash
            (let* ((cygwin-root "d:/cygwin")
            (cygwin-bin (concat cygwin-root "/bin")))

            ;;根据不同的 Windows 系统设置不同的路径
            ;;设置公司电脑的路径
            (if (string-match (system-name) "SCUT-9C14ED3B4C")
                (setenv "HOME" (concat cygwin-root "/home/water")))
            ;;设置家里电脑的路径
            (if (string-match (system-name) "32283744FF164E6")
                (setenv "HOME" (concat cygwin-root "/home/water/water")))

            (setenv "PATH" (concat cygwin-bin ";" (getenv "PATH")))
            (setq exec-path (cons cygwin-bin exec-path)))
            (setq shell-file-name "bash")
            (setq explicit-shell-file-name "bash")

            ;;else current system is Linux, do some specific setting for Linux
            (if (or (eq system-type 'cygwin)
                    (eq system-type 'gnu/linux)
                    (eq system-type 'linux))
                         (message "Current system is Linux, please do some specific setting here")))

如果要专门针对某一类型的系统设置字体等,就可以参考下面的代码来设置:

;; font set
(if (or (eq system-type 'cygwin)
        (eq system-type 'gnu/linux)
        (eq system-type 'linux))
                 (set-default-font "Courier 10 Pitch-12")
                 (set-default-font "Courier New-14"))

如果专项设置的代码量比较大,还可以把不同平台的代码分成几个文件,导入不同的文件即可。

2) 选择需要同步的文件

并不是所有的配置文件都需要同步,我也不赞同一股脑地把所有的文件同步,有一些配置文件完全可以根据平台的需要选择不同步。

像我的习惯就是 .ido.last, .recentf, .emacs.desktop 这些文件就不同步了。

因为家里的电脑和公司的电脑,干的事情基本上是不同的,没有必要搅成一堆,这样也不容易产生冲突。再一个,回家了,就不干公家的事情了嘛!

3) 文件远程同步软件或工具

至于文件同步工具,水木社区 Emacs 版上有人推荐的,用 ProjectLockerDropBox 都不错,前者是免费 SVN 服务器,后者也是一个免费的文件同步工具。同样,还有一些其它的同步软件也可以试用。

通过以上三个步骤仔细设置,就可以一劳永逸地在多台电脑间同步 Emacs 工作环境,同步 org,muse 等文件了。

感谢水木社区 Emacs 版的 ahei0802,swdonline,Madsen 等兄弟们的经验分享。