每次打开一个新的 zsh 都很慢,调查发现是 compinit -i
和 source "$NVM_DIR/nvm.sh"
这 2 个命令导致的,它倆常常不是一开终端就需要,zsh 能不能实现类似 Emacs 的 run-with-idle-timer 的功能,比如等终端空闲了 3 秒之后,自动执行一次这些耗时的命令。
我把 nvm 的配置改成下面这样,就算一开始就用 node
也 OK
export NVM_DIR="$HOME/.nvm"
# source "$NVM_DIR/nvm.sh"
function node() {
echo "Lazy loading nvm..."
unset -f node
source "$NVM_DIR/nvm.sh"
node
}
zsxh
3
果然有 nvm
当时在 nvm issue 里找到这个插件
另外用了这些插件的话,emacs 里 exec-path-from-shell 拷贝 PATH 变量时可能需要注意一下
1 个赞
zsxh
4
今天在电报群看到有人推荐用 fnm 或 volta 替代 nvm,这两个都是用 rust 写的,我试了下 fnm,确实比 nvm 快多了,目前还没遇到什么问题。
我的方案也是懒加载,并且在 zshenv 设置一个默认的 node 路径,仅当需要的时候切换时再手动执行 nvm ,体验也还可以,不至于把 node 都设成懒加载
话说 fnm 火得好快(好名字的重要性
zsxh
6
不知道是不是错觉,感觉加载 fnm 加上 fnm zsh completion 的速度比懒加载 nvm 还快… 当然最重要的是 emacs exec-path-from-shell copy相关变量方便一些,不需要针对懒加载的环境变量做些额外的处理。
time zsh -i -c exit
其实也就十几毫秒的差别,一般肉眼难以感受到,但是看到数字上涨就有点不爽