如何在emacs中获取我的.zshrc?

ros*_*vid 4 emacs zsh zshrc

当我启动emacs GUI时,根据我的.zshrc不设置PATH.如何获取我的.zshrc来正确设置它?

编辑:我正在尝试使用swank-clojure但它找不到lein因为它不在PATH.

Jon*_* O. 11

编辑添加(2014):现在有一个MELPA命名的exec-path-from-shell,它解决了这个确切的问题.(另请参阅Github存储库).安装该软件包几乎肯定更好,而不是复制和粘贴此代码段.除了正确维护之外,它还支持从shell设置中复制其他环境变量,因此从Emacs启动的任何子进程都将按预期工作.


原始答案: 这是我解决这个问题的方法,它不需要总是从shell启动Emacs(我有时也会在我的mac上烦恼):

(let ((path (shell-command-to-string ". ~/.zshrc; echo -n $PATH")))
  (setenv "PATH" path)
  (setq exec-path 
        (append
         (split-string-and-unquote path ":")
         exec-path)))
Run Code Online (Sandbox Code Playgroud)

它设置了Emacs对PATH环境变量的想法(因此它将由子shell继承)和Lisp变量exec-path,它用于从Lisp代码中查找可执行文件并用于某些自动完成目的.您可能还需要检查shell-file-name是否根据zsh二进制文件的位置而不是默认值进行了自定义/bin/bash.

  • FWIW,因为我写了这个答案,现在有一个[MELPA中的包](http://melpa.org/#/exec-path-from-shell)解决了这个问题,名为`exec-path-from-shell` .最好安装该软件包而不是复制和粘贴此代码段.除了正确维护之外,它还允许从正常的shell设置中复制其他环境变量,因此从Emacs启动的任何子进程都将按预期工作. (2认同)

Art*_*ldt 4

这个答案是为后来发现这个问题并由于 Mac 上的 Emacs 默认行为而遇到此问题的人提供的,

如果您使用的是 Mac,并且想知道如何让 emacs 从 shell 启动,它将以图形模式而不是文本模式获取您的自定义 ENV,然后从 zsh 启动它,如下所示:

 /Applications/Emacs.app/Contents/MacOS/Emacs  
Run Code Online (Sandbox Code Playgroud)

这应该会导致 emacs 看到您所有的 shell(zsh 或其他)自定义。