关于shell的配置有两个小问题。我查看了自定义选项,甚至源代码,但都无济于事。也许我应该再仔细看看。
-
当我启动Emacs并打开shell时,目录是"~/. Emacs"。d/elpa'而不是我的主目录'~/',这是我所期望的。我不知道这个配置是从哪里来的,也没有找到改变它的方法。
-
我在我的。bashrc中更改了$PATH,并根据我的需要定制了Emacs变量'exec-path'。但是,shell不会反映第一个更改,它不知道这个更改,而bash知道。shell是如何获得这些信息的?它与bash在了解该变量的变化方面有何不同?
谢谢你的提示
托尔斯滕
p>
发现一个类似的问题[在这里](http://stackoverflow.com/questions/3621755/what-setup-file-does-eshell-elisp-shell-read-when-it-starts-how-eshell-sets-i)。第二点的答案。是shell不读取。bashrc,因此$PATH必须设置在启动过程中较早读取的文件中。在我的Ubuntu系统/etc/environment
似乎是Emacs在启动时读取的文件,用于设置$PATH。
shell似乎在当前工作目录中启动,对您来说(在Emacs启动之后)是"~/. Emacs .d/elpa"。您可以使用"M-x cd"手动更改它,但这应该不是必需的。如果你编辑某个文件并从它的缓冲区启动shell, shell将在与该文件相同的目录下启动。
但是如果你真的想启动你的主目录下的每个shell会话,你可以在shell启动前调用一个钩子"cd"
在Q1中已经提到:当shell启动时,它会在当前缓冲区的目录中启动。如果我没记错的话(这不是给定的),在macOS上有一段时间,当Finder启动emacs时(即双击图标),*scratch*
的当前缓冲区是根/
。现在,当它被finder启动时,*scratch*
的当前缓冲区是我的主目录。
对于Q2,您要设置的变量是eshell-path-env
。这是一个冒号分隔的路径列表。
我已经使用.dir-locals.el
来设置目录特定的变量,所以我计划这样做,但我相信你可以使用启动钩子。
请记住,eshell
是而不是 bash
、zsh
、csh
等。它不会读取他们的rc文件,也不会读取/etc/environment
等。与comint-mode
不同,不是emacs
的子进程,而是完全包含在emacs
中。