接 去掉exec-path-from-shell加快两秒启动时间
也不仅仅是exec-path-from-shell
, 还包括其它任何“从shell拷贝环境变量”的配置。
现在还有必要在Linux下启用这类的设置吗?以及如果我真的不在Linux下启用这类配置,我可能会受到什么影响?
另外这里不涉及奇怪的发行版和奇怪的shell以及奇怪的系统配置。只讨论最流行的那些。
谢谢。
接 去掉exec-path-from-shell加快两秒启动时间
也不仅仅是exec-path-from-shell
, 还包括其它任何“从shell拷贝环境变量”的配置。
现在还有必要在Linux下启用这类的设置吗?以及如果我真的不在Linux下启用这类配置,我可能会受到什么影响?
另外这里不涉及奇怪的发行版和奇怪的shell以及奇怪的系统配置。只讨论最流行的那些。
谢谢。
YMMV.
配置毕竟是自己的, 我自己的配置就直接写死find-program
和一些命令行工具的绝对路径, 因为我用windows, 不手动指定往往会出现很多问题. 所以, 如果你的电脑需要exec-path-from-shell, just do it.
如果你发现某些兼容性配置只有你自己需要, 而你又想写配置让大部分人用. 你可以学习abo-abo的骚气做法.
是个好办法……不过我是要反着来。
我的问题是我不知道其他人需不需要这些兼容性配置。
BTW,我极度厌恶甚至憎恨任何有关兼容性的东西……
你试试不就知道了?找不到执行文件再说怎么修复。或者你对比一下Emacs和终端里环境变量有没有不一样也行
关键是我自己的系统配置和shell配置和linux发行版本身就比较奇怪……所以我才会来听大家的看法。
奇怪的话,更应该自己试试了。我觉得别人说的都不如你自己尝试来的明白
呃……原谅我的强迫症……
我自己不用是没任何问题的……但是我发现大家都在用啊……除了Spacemacs——但是Spacemacs自己造了一个轮子 (.spacemacs.env) 来解决这个问题。
Emmmm 那你为啥要给doom提那个issue😂
因为闲的……
而且我确实想听听用的人和不用的人都有什么理由。所以我才给这个package的作者和doom都提了issue
我没用。我用的下面这段code,从自己配置的shell环境抓取PATH
;; Load path from zsh login shell
(when (or IS-LINUX IS-MAC)
(defvar zsh-executable "/usr/bin/env zsh")
(let* ((zshpath (shell-command-to-string
(concat zsh-executable " -lc 'printenv PATH'")))
(pathlst (split-string zshpath ":")))
(setq exec-path pathlst)
(setq eshell-path-env zshpath)
(setenv "PATH" zshpath))
;; use zsh as default shell
(setenv "SHELL" "zsh"))
从来没用过这个包。
环境变量取决于启动 Emacs 的方式,以及 Emacs 版本。
自然 Emacs 就继承了 shell 的环境变量,所以我没必要使用这个包。
先看看终端 PATH 有些什么:(我用的是 macOS,Linux 应该也类似)
⋊> echo $PATH
/Users/dude/.nix-profile/bin:/Library/Frameworks/Python.framework/Versions/3.7\
/bin:/usr/local/opt/[email protected]/bin:/usr/local/sbin:/Users/dude/flutter/bin:/Users/\
dude/.phpbrew/php/php-7.0.12/bin:/Users/dude/.phpbrew/bin:/Users/dude/.jenv/sh\
ims:/Users/dude/.jenv/bin:/Users/dude/.rbenv/shims:/Users/dude/.rbenv/bin:/Use\
rs/dude/.pyenv/shims:/Users/dude/.pyenv/bin:/Users/dude/.nodenv/shims:/Users/d\
ude/.nodenv/bin:/Users/dude/.dotfiles/bin:/tools:/platform-tools:/usr/bin:/bin\
:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/bin:/Library/TeX/texbin:/Applications\
/Wireshark.app/Contents/MacOS
-nw
模式:⋊> emacs -nw -Q --eval '(insert (getenv "PATH"))'
/Users/dude/.nix-profile/bin:/Library/Frameworks/Python.framework/Versions/3.7\
/bin:/usr/local/opt/[email protected]/bin:/usr/local/sbin:/Users/dude/flutter/bin:/Users/\
dude/.phpbrew/php/php-7.0.12/bin:/Users/dude/.phpbrew/bin:/Users/dude/.jenv/sh\
ims:/Users/dude/.jenv/bin:/Users/dude/.rbenv/shims:/Users/dude/.rbenv/bin:/Use\
rs/dude/.pyenv/shims:/Users/dude/.pyenv/bin:/Users/dude/.nodenv/shims:/Users/d\
ude/.nodenv/bin:/Users/dude/.dotfiles/bin:/tools:/platform-tools:/usr/bin:/bin\
:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/bin:/Library/TeX/texbin:/Applications\
/Wireshark.app/Contents/MacOS
⋊> emacs -Q --eval '(insert (getenv "PATH"))'
/Users/dude/.nix-profile/bin:/Library/Frameworks/Python.framework/Versions/3.7\
/bin:/usr/local/opt/[email protected]/bin:/usr/local/sbin:/Users/dude/flutter/bin:/Users/\
dude/.phpbrew/php/php-7.0.12/bin:/Users/dude/.phpbrew/bin:/Users/dude/.jenv/sh\
ims:/Users/dude/.jenv/bin:/Users/dude/.rbenv/shims:/Users/dude/.rbenv/bin:/Use\
rs/dude/.pyenv/shims:/Users/dude/.pyenv/bin:/Users/dude/.nodenv/shims:/Users/d\
ude/.nodenv/bin:/Users/dude/.dotfiles/bin:/tools:/platform-tools:/usr/bin:/bin\
:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/bin:/Library/TeX/texbin:/Applications\
/Wireshark.app/Contents/MacOS
在双击运行之前,把 ~/.emacs.d/ 改名以避免配置文件修改到环境变量,影响到观察(或者在 Script Editor.app 中运行 do shell script "/Applications/Emacs.app/Contents/MacOS/Emacs -Q --eval '(insert (getenv \"PATH\"))'
模拟整个操作)。
/usr/bin:/bin:/usr/sbin:/sbin:/Applications/Emacs.app/Contents/MacOS/bin-x86_6\
4-10_10:/Applications/Emacs.app/Contents/MacOS/libexec-x86_64-10_10
/Users/dude/.nix-profile/bin:/Library/Frameworks/Python.framework/Versions/3.7\
/bin:/usr/local/opt/[email protected]/bin:/usr/local/sbin:/Users/dude/flutter/bin:/Users/\
dude/.phpbrew/php/php-7.0.12/bin:/Users/dude/.phpbrew/bin:/Users/dude/.jenv/sh\
ims:/Users/dude/.jenv/bin:/Users/dude/.rbenv/shims:/Users/dude/.rbenv/bin:/Use\
rs/dude/.pyenv/shims:/Users/dude/.pyenv/bin:/Users/dude/.nodenv/shims:/Users/d\
ude/.nodenv/bin:/Users/dude/.dotfiles/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/l\
ocal/bin:/opt/X11/bin:/Library/TeX/texbin:/Applications/Wireshark.app/Contents\
/MacOS:/tools:/platform-tools
可见 Emacs-mac 是有继承 login shell 的 PATH,只是顺序稍微不一样。
然而我的Awesome WM的应用启动器不会继承$HOME/.zshenv
以及其他地方自行设置的PATH……
真awesome
哈哈哈哈哈
不仅仅是awesome,好多WM的launcher都不会加载用户设定的环境变量,只会加载全局的
个人觉得有必要用,尤其是PYTHONPATH
和GOPATH
之类的需要导入。启动慢可以用-l
参数来解决,所有需要导入的变量放在.zshenv
。
参考Centaur Emacs
:.emacs.d/init-basic.el at 2646a36501a301e4b5408efdc4bbab46122782cb · seagle0128/.emacs.d · GitHub
这类变量我就从没想过自动导入的事情……
只是举例。主要是保证 terminal 和 emacs 的环境变量一致。
升级了10.15.1之后,emacs-mac双击好像不会继承PATH了?
自己的环境变量里加个flag,emacs启动时检查一下呗,没有就加载,有就不用加载咯。因为我自己的shell环境为了避免重复加载部分配置,把一些变量单独定义出来然后加到zprofile里了,但有些如xession不会加载这个文件我就检查一下,自动加载了。
有必要,我需要各种方式启动的 emacs 体验一致。