随身携带你的神器——Emacs

作者: 麦满屯 | 来源:发表于2017-02-14 18:00 被阅读1340次
    1. Emacs的运行方式分析
      ===================

    Emacs可以在大多数目前常见的系统中运行,GNU/Linux、FreeBSD、macOS、Windows等都可以。一般来说在
    Emacs主页 下载对应的版本,在本地展开或安装后就可以跑起来了。不过聪明的读者一定发现了,Emacs需要中用户的主目录(系统变量HOME指向的目录),例如,Windows操作系统中登录用户的账户目录(例如C:\Users\ABC),读取配置文件。如果在这个目录中没有找到配置文件,Emacs也会自己创建配置文件,用以保存用户在使用过程中的一些自定义内容。

    这样,问题来了,如果我想随身携带Emacs作为写作工具可行吗?我不停的在不同的计算机上写东西,我怎么保证我的写作体验不变呢?难道我需要在每一台临时使用的计算机上安装Emacs的运行环境(特别是那些扩展Package)?那如果遇到了没有Home目录的写入权限怎么办?如果依赖了某些特殊的Package版本怎么版?

    听起来,问题似乎非常多。好在,我们现在有一个大家耳熟能详的名词——“绿色软件”。

    我们如果可以让Emacs脱离系统定义的HOME目录位置,从一个预先定义好的位置读取配置文件,那不就成了可以独立运行的绿色软件了吗?

    1. 让Emacs绿色运行
      ===============

    要让Emacs随身运行,我们需要先来看看Emacs配置文件的存放方法

    2.1 Emacs的配置文件

    在Windows环境下,Emacs的配置文件有如下几种文件保存方法[1]

    1. .emacs 文件。
    2. _emacs 文件。以保证在Dos和FAT文件系统下的向前兼容。
    3. .emacs.d/init.el 使用init.el作为启动文件,并 .emacs.d
      目录管理Emacs的各种配置文件。

    2.2 全面查看Emacs的配置存放方法

    从Emacs的手册中,我们可以看到Emacs配置文件在Windows操作系统中按以下优先级确定指定配置文件的存放位置[2]

    1. 如果设置了 HOME 环境变量,那么直接存放在该环境变量指定的目录位置中
    2. 如果设置了 HKCU\SOFTWARE\GNU\Emacs\HOME
      注册表主键,那么使用该主键指明的目录位置
    3. 如果设置了 HKLM\SOFTWARE\GNU\Emacs\HOME
      注册表逐渐,那么使用该主键指明的目录位置。由于该目录位置会被不同Windows用户共享使用,因此不推荐使用该键值。
    4. 如果 C:\.emacs 存在,则使用 C:/. 存放配置文件。
      这个设计是为了保证前向兼容,在以前的Emacs版本中,如果 HOME
      目录没有定义,则使用默认的 C:/ 作为HOME目录。
    5. 使用Windows 用户的 AppData
      目录。通常这个目录位于用户profile目录中。具体位置根据Windows版本及计算机所在的域名的不同而有所变化。

    所以,让Emacs脱离操作系统的限制,以绿色方式运行的方法再指定 HOME
    环境变量的内容。而且,需要避免对其他使用HOME环境变量的程序,如
    Vim,的影响(如果你想左右互博的话,:P)。

    2.3 找到Emacs代码设置HOME环境变量的地方

    Emacs提供了在加载用户配置文件前进行运行环境定义的方法,按照代码在运行时刻的执行优先级
    [3] 列举如下:

    1. site-start.el
    2. init file
    3. default.el

    从这个加载顺序,可以看到,修改site-start.el是修改 init
    文件读取位置的好地方。

    2.4 确定修改方法

    在Emacs中,要设置环境变量,可以使用 setenv 函数来实现。查看帮助,我们看到函数定义是:

    (setenv VARIABLE &optional VALUE SUBSTITUTE-ENV-VARS)
    

    。所以,我们可以使用这样的形式来设置环境变量:

    (setenv "HOME" "path/to/some/directory")
    

    为了让Emacs脱离特定操作系统的设置,我们可以写一些小代码,动态获得当前Emacs所在的目录,并将其所在磁盘的根目录下的home 目录(名)作为存放配置文件的HOME目录。

    所以我们可以得到完整的代码。

    2.5 Emacs代码

    (defvar PortableHome (substring data-directory 0 3))
    (defvar usb-home-dir (concat PortableHome "home/"))
    (setenv "HOME" usb-home-dir)
    
    1. 代码使用及总结
      ==============

    3.1 代码使用

    将上述代码存放到site-start.el文件中。并将这个文件存放到Emacs的site-lisp目录中。并将你的配置文件放到Emacs所在磁盘根目录下的home目录中(按照.emacs、emacs、.emacs.d/init.el三种方式之一),好了,重启Emacs,你应该看到,你的Emacs已经按照你的配置运行起来啦!

    把Emacs相关文件以及你新创建的Home目录中的所有内容都复制到一个U盘中吧,你会发现无论在那一台计算机上,你的Emacs都可以一如既往为你提供统一的文本编辑功能啦!

    3.2 总结

    本文描述了让Emacs脱离特定操作系统的限制(更换操作系统类型时,需要使用对应系统的Emacs可执行文件,但配置文件是可以做到统一的)。在U盘中运行的一种方法。我使用这种方法,使我的Emacs在从Win7升级到Win10的过程中,不必重新进行任何配置,保持了统一的使用体验。也让我在解决使用Windows的过程中一定会遇到的重新安装系统,简化了工作环境初始化的工作量。

    我可以安心的去喝一杯可乐,等待备份复制进程跑完,我的Emacs就会满血复活。

    你们的Emacs呢?:P

    1. 参考文档
      =========

    1. https://www.gnu.org/software/emacs/manual/efaq-w32.html#Location-of-init-file

    2. https://www.gnu.org/software/emacs/manual/efaq-w32.html#Location-of-init-file

    3. 从Emacs的site-run-file变量文档中看到,不同配置文件的执行优先级顺序。

    相关文章

      网友评论

      • 1f94d78039b2:大神,归来吧
      • JimW_7c94:纯新手,楼主的讲解是最细致易懂的,谢谢。
      • 顺ze:呃,基本上在别的机子上我都是裸奔emacs,没做特殊的设置,自己的机子就那么两台,同步一下.emacs配置文件就好,现在的问题是在手机上怎么查看自己的todo.org,MobileOrg好像不大好使
      • 90ee5270fbee:写的很好

      本文标题:随身携带你的神器——Emacs

      本文链接:https://www.haomeiwen.com/subject/kgffwttx.html