最近想要学习spacemacs,但是由于每天都离不开emacs,所以想要在现有的emacs可以运行的情况下hack spacemacs。怎么让emacs怎么能启动时加载不同的目录呢?一个是emacs,一个是需要hack的spacemacs。emacs启动时是不是默认加载.emacs.d目录?可以修改吗?
也可以考虑直接写两个alias,来回mv文件夹
感谢大佬~~!!
什么意思,可以详细说明一下吗?
我在用的命令:
alias spacemacs='mv ~/.emacs.d ~/.backup/purcell && mv ~/.backup/sp ~/.emacs.d'
alias purcell='mv ~/.emacs.d ~/.backup/sp && mv ~/.backup/purcell ~/.emacs.d'
来回 mv 有一个问题是如果在用的 emacs中有 autoload 对应的文件尚未加载,待使用 autoload 函数时会报错(文件无法找到)。
不知道你们如何解决的?
话说 emacs 为何不提供一个指定 user-emacs-director
的命令行选项,这样灵活多了。
关了emacs再做mv啊……
好吧,我比较习惯原来的保留运行,同时体验新的配置。
你需要更加无痛的方式:
找了下在启动时指定目录的功能,发现几年前就有人提了补丁。但 Emacs 开发者认为没有必要:
- 会增加维护成本;
- 此特性没有很迫切的使用场景,且当前不是没有解决方案,只是不那么方便。
补丁提交人 François Févotte 总结了目前有三种方法:
-
设置 =HOME= 环境变量
缺点: Emacs 及其子进程会把 =~/= 解析为新设置的 =HOME= 目录,容易混乱
-
设置 =~/.emacs.d/= 的软链接
缺点:多个 Emacs 运行实例,必须共享同一个配置目录
-
使用 =emacs -q -l SOMEWHERE/init.el= 启动,在 =SOMEWHERE/init.el= 中设置 =user-init-file= and =user-emacs-directory=
缺点:会 bypass 正常启动流程,有些功能比如 =emacs-init-time= 、 =after-init-hook= 无法正常工作
我比较倾向与方法1, @twlz0ne 的 here-emacs
脚本刚才看了下也是采用此种方案。
Emacs 有个 --user
不知道能不能利用上
--user, -u USER load ~USER/.emacs instead of your own
Good to know that.
试了一下,这个应该是指系统的用户。创建用户比较麻烦,我指定一个不存在的用户,会警告( *Warnings*
):
Error (initialization): User foo has no home directory
想不通这个选项的使用场景,一般也访问不了其他用户的权限啊,除非是 root 。
可能需要一些 Unix 用户管理的知识。不见得就需要 root,有相关的权限就行。
就是因为修改不了其它用户的文件,我才可以放心用这个帐户搞事。我写 Common Lisp 就是另外开了一个没有设置密码的低权限账户,然后从主用户 su 过去以免操作失误产生垃圾文件污染到关键路径,产生的缓存文件也不需要一个个手动清理,只要 rm 这个专用账户的 $HOME 就行,甚至可以放心地全盘 find rm 属于这个专用账户的文件。
首先这个用户要存在,比如在 mac 下:
⋊> dscl . read /Users/foo
...
NFSHomeDirectory: /Users/foo
Password: ********
PrimaryGroupID: 80
RealName:
Test User
RecordName: foo
RecordType: dsRecTypeStandard:Users
UniqueID: 1010
UserShell: /bin/bash
@xuchunyang @LdBeth 但似乎并没有起到隔离作用,环境变量依然是当前用户的:
⋊> emacs -user foo --batch --eval \
'(message "=> %S" (string= "'$HOME'" (getenv "HOME")))'
=> t
所以我是 su 到开发用户,再反过来用这个选项指定价值主用户配置的。毕竟对我来说没必要搞很多份配置。
为啥我指定了emacs executable path,它还是在terminal里打开了。。
没认真看帮助。
here-emacs /path/to/emacs_bin -a ''
原来是需要args…