Emacs特定于shell的环境变量
问题描述:
在Windows上的本机emacs中,如何指定环境变量以便在不修改emacs环境的情况下在emacs中启动我的shell?在我的具体情况下,我想将HOME
设置为zsh的cygwin特定值,而不修改emacs认为其配置文件所在的位置。Emacs特定于shell的环境变量
我试过一些东西,比如改变我的外壳到env -u HOME ...\zsh.exe
,但是这似乎打破(shell-command)
(它似乎涉及参数顺序)。
如果此命令的存在,它可能会做我想做的:
(setq explicit-zsh-environment '("HOME" nil))
我读过像(How can I run Cygwin Bash Shell from within Emacs?)一堆相关的问题,但对我来说不同寻常的是,我所有的配置文件将它们转换为git repo,而cygwin和windows对于符号链接采用了非常不同且不兼容的方法。
答
这是有关运行zsh
作为在Emacs的壳(即不有关从外壳的zsh启动Emacs),以及具有该环境下的zsh过程认为是到Emacs有环境不同?
如果是这样,你可以在C-Hvprocess-environment
变量绑定,当你启动一个进程。例如:
(let ((process-environment '("HOME=/tmp")))
(call-interactively 'shell))
$ echo $HOME
/tmp
答
的Emacs发送新的外壳文件
~/.emacs_shellname
的内容作为输入,如果存在的话,其中shellname是文件名该shell是从哪里加载的。例如,如果使用bash
,发送给它的文件是~/.emacs_bash
。如果找不到这个文件,Emacs会尝试~/.emacs.d/init_shellname.sh
。
所以对于zsh
你把里面的~/.emacs.d/init_zsh.sh
类似:
export HOME=/tmp
这是好事,但有将自动适用于'壳command'和M-X的方式'shell'? – kleinpa 2014-09-19 02:35:11
它只是你关心的shell进程吗?如果你想让它影响你从Emacs调用的每一个进程,那么你可以直接修改这个变量,而不是让它绑定它。那你就不需要做其他事情了。 – phils 2014-09-19 03:56:22
我想我在这里变成了一个奇怪的地方。我只需要接受,直到我找到比拥有cygwin特定主目录更好的东西,我将不得不处理一些不一致的问题。我会试着修改变量,看看遇到了什么样的问题。 – kleinpa 2014-09-19 04:20:16