随身携带你的神器——Emacs

  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变量文档中看到,不同配置文件的执行优先级顺序。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容