
新购入了一台 Mac ,准备不迁移环境而是从头配置一下环境,现在准备安装 shell 插件了。
之前一直用着 Oh My Zsh ,确实很好用,但是感觉初始化时间越来越长,一个新的 session 要 1 ~ 2 秒才初始化完成,可能是插件有点多了,而且看有人说 Oh My Zsh 的性能差点意思。
问下各位现在有 Oh My Zsh 的上位替代么?可以从使用体验、易用度、生态、性能之类的方面讲讲。
1 zengxs 2024-11-13 10:41:48 +08:00 fish |
2 me262 2024-11-13 10:42:07 +08:00 你看看这个可以不,我日常 linux 用这个 https://starship.rs/zh-CN/ |
3 FryFryFry 2024-11-13 10:43:32 +08:00 fish |
5 synthpop123 2024-11-13 10:46:11 +08:00 我在用 zinit ,比 oh-my-zsh 快些,支持插件的快速加载( light )和懒加载( turbo mode ),还可以使用 snippet 功能直接复用 omz 仓库中的插件 https://blog.lkwplus.com/posts/macos-dev-setup#zsh-%E9%85%8D%E7%BD%AE |
6 Azone 2024-11-13 10:46:27 +08:00 fish + starship ,用了你就回不去了 |
7 0d 2024-11-13 10:46:33 +08:00 fish 还不错,对 jethrokuan/z 这个插件爱不释手。 之前用的 zsh4humans ,这个也很强,开箱即用。感觉作者对 zsh 的理解恐怖如斯。 |
8 mcfog 2024-11-13 10:58:34 +08:00 fish 此类主题罕见的 fish 用户大量冒泡哈哈 |
9 4BVL25L90W260T9U 2024-11-13 11:01:28 +08:00 直接用 fish |
10 0d 2024-11-13 11:02:29 +08:00 @tinytoadd zsh4humans 有个很强的优势是 gitstatus 这个插件,它能异步收集 git 信息并显示在 prompt 上。之前一直想把它移植到 fish 上,但很难,没办到。 |
11 neoshui 2024-11-13 11:06:00 +08:00 via Android 借楼问问 Windows 终端的工具 |
12 longlongame 204-11-13 11:09:04 +08:00 自己用 zinit 搭的一个配置: https://github.com/xukaihub/dotfiles/blob/main/shell/.zshrc 目前 Coding 环境:Alacritty+Zsh+Tmux+Neovim(LazyVim) |
13 PTLin 2024-11-13 11:09:11 +08:00 1~2 秒真无所谓吧。我不光有 omz ,还有个 zellij ,启动时间要 3~5 秒,但是开了之后基本就不关了,这点时间无所谓的。 |
14 FalconD 2024-11-13 11:11:13 +08:00 via Android 建议 fish 一步到胃 |
15 sketcherly 2024-11-13 11:11:41 +08:00 zsh 原生+自动补全插件+自己写个 git 分支的小脚本,速度飞起,功能也感觉够用了 |
16 airborne007 2024-11-13 11:11:55 +08:00 oh-my-bash |
17 yihy8023 2024-11-13 11:16:00 +08:00 我使用了 p10k ,通过延迟加载,可以让终端秒开 |
19 jiefengwang 2024-11-13 11:36:18 +08:00 fish |
20 jiefengwang 2024-11-13 11:37:28 +08:00 @bigbugbag 优点:fish 的话文件夹路径补全可以随便几个字母只要顺序不错误就可以提示出来,但是 zsh 配合 ohmyzsh 暂时好像还做不到这种效果 |
21 Binwalker 2024-11-13 11:38:06 +08:00 fish + starship |
22 unsuey 2024-11-13 11:46:07 +08:00 zimfw |
23 charlie21 2024-11-13 11:50:00 +08:00 zimfw https://github.com/zimfw/zimfw 推荐 theme eriner |
24 treizeor 2024-11-13 11:51:48 +08:00 折腾大半天就省这开启的一两秒,,, |
25 liubaicai 2024-11-13 11:53:16 +08:00 ohmyfish+fishbone |
26 aloxaf 2024-11-13 11:53:32 +08:00 @jiefengwang #20 zsh 也可以,只是很少有人这么配置 zstyle ':completion:*' matcher-list 'r:|?=**' 以前试过一段时间,好像有时候反而会增加很多干扰项,后面没用了 |
27 Meursau1T 2024-11-13 11:59:26 +08:00 我返回 bash 了,用 fzf-tab-completion 实现补全,然后自己封装个 cd ,把补全的初始化放进去,这样第一次切换目录的时候会卡一两秒,但终端始终秒开 |
28 lerry 2024-11-13 12:00:53 +08:00 插件都注释掉就好了,我只留了 plugins=(autojump git docker) |
29 wu67 2024-11-13 12:02:02 +08:00 但即使我关掉 omz, 只用 zsh, 好像也没快多少, 新 tab 还是有肉眼可感知的初始化卡顿 |
30 DualVectorFoil 2024-11-13 12:06:34 +08:00 via Android 首先 omz 定位是一个终端框架,它包含了主题功能,更多的是好用的插件,然后前面楼层提到的 starship 是 prompt 框架其实可以当做主题美化看待,然后 p10k 是个针对 zsh 做的主题,加载速度一流。 另:看到这么多人推荐 fish 搞的我心里痒痒的想去试试了哈哈 |
31 Kobayashi 2024-11-13 12:21:11 +08:00 via Android 关键不是 zsh ,fish ,bash ,而是插件。zsh 插件就是利用 zsh 脚本实现的功能。因为你打开 zsh 出于一个交互式 shell 中,插件加载方式只有 source 脚本才能影响当前进程。 ohmyzsh 是一个框架,即自带了一批插件脚本。插件管理器能帮你下载来自 git 仓库的插件,并帮你 source 插件。 你能做的 - 砍掉耗时插件 - 砍掉自己 zsh 配置(如 zshrc )中的耗时命令,如 nvm, brew 调用. - 使用 zinit 插件管理器帮你“异步”加载插件(其实是因为 prompt 也是一个插件,在 prompt 渲染后和你反应过来敲击键盘还有点延迟,利用这个时间加载其他插件) - 回车耗时也是因为插件,如 zsh fish 提供了完整的钩子机制。大部分回车耗时是因为 git status 检查,优化 git 状态可以使用 gitstatusd ,或者选用支持异步 git 状态查询的 prompt 。 下边是喷子时刻 - 用什么 go ,rust 写 zsh 插件管理器纯属 NC ,没明白性能瓶颈在哪儿。除了 zinit 以外的插件管理器只是自动化了插件下载,没有在插件加载上做任何优化。插件下载都是 git clone ,插件加载都是 source ,哪有什么区别。 - starship 并不快,它的简介 blazing fast 完全胡说八道。调用 shell 外部的进程( starship 本身)反而会增加一些额外耗时,它只是跨了平台、跨了 shell 。而且 git 状态查询也没有做任何优化。 |
32 zhengxiexie2 2024-11-13 12:27:38 +08:00 oh-my-posh |
33 FightPig 2024-11-13 12:31:39 +08:00 用了很多年 fish |
34 psklf 2024-11-13 12:34:33 +08:00 @sketcherly +1 ZSH 然后自己装插件 |
35 thinkershare 2024-11-13 12:35:55 +08:00 @AlexShui Windows Terminal+posh+powershell 7.x |
36 yaytohkay 2024-11-13 12:36:19 +08:00 fish 不兼容 bash 语法,在其他环境上安装一个开箱即用还不错,常用的话不大推荐 |
37 chopin1998519 2024-11-13 12:40:02 +08:00 简单的 arm soc 都用 fish 。。。开箱即用 正常桌面、服务器还是 zinit 或者 oh-my-bash .... 要不有些不兼容,突然来一下还是停膈应的。 |
38 guanhui07 2024-11-13 12:40:27 +08:00 via iPhone Fish |
39 ysc3839 2024-11-13 12:43:02 +08:00 via Android macOS 有这么慢吗?是不是插件开太多了还是别的问题? 我 Windows 下 MSYS2 安装 Oh My Zsh ,启动都不用那么久,感觉上只要 1 秒。 |
40 ysc3839 2024-11-13 12:47:22 +08:00 via Android @tinytoadd Oh My Zsh 配合 powerlevel10k 也可以用 gitstatusd 。 |
41 zhangchioulin 2024-11-13 12:51:41 +08:00 fish shell 用了一段时间感觉不错。 zsh 切过来需要重新写一下 profiles |
43 Rrrrrr 2024-11-13 13:18:53 +08:00 已经退回 bash, 那个垃圾 ohmyzsh 整天升级,升他妈的 |
44 neoshui 2024-11-13 13:42:58 +08:00 via Android @thinkershare posh 也慢 |
45 meeop 2024-11-13 13:50:39 +08:00 原生的终端就挺好用的 |
46 jiefengwang 2024-11-13 13:52:05 +08:00 @aloxaf 原来如此,感谢感谢 |
47 mayli 2024-11-13 13:53:35 +08:00 去掉 ohmyzsh ,大部分没啥卵用 |
48 javakun 2024-11-13 13:59:09 +08:00 |
49 thinkershare 2024-11-13 14:24:28 +08:00 @AlexShui 感觉速度还可以啊,我 posh 启动延迟都是 300/500ms ,没啥问题. 这玩意改用 go 写后,速度就变慢了。以前要快不少。 |
50 since2021 2024-11-13 14:26:43 +08:00 最近用 oh-my-posh ,一个配置文件搞到 gist 里,terminal.app, cmder, powershell 都能统一成一个风格的~ |
51 rick13 2024-11-13 14:29:14 +08:00 |
52 DesnLee 2024-11-13 14:32:36 +08:00 竟然没看见一个推 prezto 的,好用,很好用 |
53 tiiime 2024-11-13 14:44:08 +08:00 只推荐不管死活 nushell + starship |
54 xiadengmaX1 2024-11-13 14:45:34 +08:00 直接加插件不用 oh-my-zsh |
56 imkerberos 2024-11-13 15:05:24 +08:00 zim |
57 Immortal 2024-11-13 15:06:37 +08:00 不要直接安装 oh-my-zsh,可以抽出来用它部分插件 一开始我是用 zinit 管理的,现在用 zim,体感上更快,可以参考下我的 dotfiles https://github.com/0x7a7a/dotfiles/tree/main/zsh/zim |
59 Tiande PRO 流下了只会用 bash 的泪水 |
61 Aixtuz 2024-11-13 15:43:54 +08:00 目前用的 zinit ,然后用:zinit snippet OMZ::lib/history.zsh 这种格式去挑自己需要的 omz 插件。 然后用 zsh-defer 和 zinit light-mode 加载其他插件。 其他可以延后加载的东西仍在 async_init() {} 里,同样交给 zsh-defer 加载。 |
62 kneep 2024-11-13 15:44:09 +08:00 从 OMZ 到 Starship ,到什么都不用 T_T |
64 Immortal 2024-11-13 16:35:32 +08:00 @Immortal #57 再补充一下吧,我也算折腾比较久的.(配合我上面的 dotfiles 食用) 对于说 zinit"很快"其实有歧义的,p10k 的作者对于 shell 的速度有一个具体的测试和解释: https://github.com/romkatv/zsh-bench 一般来说 zsh 搭配 p10k+zinit/zim 都可以达到不错的启动速度 如果想要变得"好用",除了常见的补全/高亮以外,我推荐搭配使用 - z.lua 和 fz.sh,目录快速跳转 - zsh-vi-mode,在 zsh 中使用 vim 模式快速修改 - fzf-tab,用 fzf 的方式提高 tab 补全使用体验 |
65 hslx111 2024-11-13 16:44:44 +08:00 Wrap |
66 xiaozhu317 2024-11-13 16:55:25 +08:00 |
67 hackerwilson 2024-11-13 16:56:31 +08:00 oh-my-bash 也可以了。 |
68 dinghmcn 2024-11-13 17:00:00 +08:00 |
69 bruce0 2024-11-13 17:05:09 +08:00 感谢老哥们推荐的 Starship, 在 windows 的 powershell 中替换了原来使用的 oh-my-posh, 现在启动速度快多了, 以前经常启动卡 1-2 秒, 现在基本秒开 |
71 yb2313 2024-11-13 17:19:51 +08:00 nushell+starship ,非常好用,无敌 |
72 Lockeysama 2024-11-13 17:39:32 +08:00 “一个新的 session 要 1 ~ 2 秒才初始化完成” 这个问题我熟,大概率是因为某个配置加载时间的问题,我之前是初始化的时候加了个自动 AWS 命令的授权的配置,后面去了就不会了,秒开 正常的插件基本不会要太多时间,慢的大概率跟网络有关 |
73 littlewing 2024-11-13 17:55:43 +08:00 咋那么多用 fish 的,能说一下哪里好用吗 |
74 james122333 2024-11-13 17:57:49 +08:00 via Android 自己写 bash 写好都不慢何况 zsh... 脚本效能比较 zsh > fish > bash zsh 本身并没有肉眼可见的慢 只是 fish 有内置用 c 写的功能罢了 会写用 bash 都可 bash 还是挺强的 不要用 oh my XXX 的东西 没有一个精品 plugin 思想也不好 扩充差东西难以用 |
75 james122333 2024-11-13 18:09:08 +08:00 via Android 多数脚本 大概 99.999%的写出来的是意大利条 会采用低效写法 if else 判断也满天飞 一个脚本好几百行 机制运作与效能都不好 |
76 RicardoY 2024-11-13 18:36:04 +08:00 fish 的语法和 zsh 不一样,这个需要注意下 |
77 blackcellcode 2024-11-13 18:45:13 +08:00 https://www.warp.dev/ 可以试试这个 我用的 |
78 zthxxx 2024-11-13 18:50:1 +08:00 要关注性能就要像 #31 楼说的那样去查 自己写的 zsh 主题,写的时候就考虑到了性能,消除了所有能消除的进程间调用,git status 查询也是异步的 做到 4ms per render https://github.com/zthxxx/jovial |
79 zthxxx 2024-11-13 18:53:26 +08:00 Fish 语法差异太大哦,如果自己平时还经常写一些 CI 脚本、维护一些服务器、Homelab 之类的,来回切换语法上思考起来挺麻烦的 想象一下你每天在 Windows / macOS 、VSCode / JetBrains 家的 IDEA 之间来回切换快捷键 |
80 lanbos 2024-11-13 18:54:22 +08:00 在好几台设备来回切,mac 用 zsh ,开发服务器 ssh 上去用 fish ,win server 用 nushell (有小 bug )。。。目前没有啥好方案,感觉 nushell 性能最好。。。 |
81 newtype0092 2024-11-13 18:55:11 +08:00 用了好久才知道原来 fish 用户这么多了。。。我还以为一直不温不火呢 |
82 james122333 2024-11-13 19:02:33 +08:00 via Android |
83 billlee 2024-11-13 19:07:37 +08:00 mac 上初始化要 2 秒,一半是初始化脚本里面调用的某个工具是 xcode commandline tools 提供的,并且触发了 xcode 的某种逻辑导致阻塞。有时候 sudo xcodebuild -license accept 能解决。 要具体 debug 是什么命令引起的问题,可以参照这个回答 https://unix.stackexchange.com/a/565927, 在 source oh-my-zsh 之前,先调用 set -x, 这样能看到卡在哪个命令上。 |
84 webcape233 2024-11-13 19:10:15 +08:00 via iPhone starship+zsh |
85 gl3081 2024-11-13 0:15:03 +08:00 Tabby + Amazon Q |
86 BeforeTooLate 2024-11-13 20:53:36 +08:00 一开始我一直用 oh-my-zsh ,突然一天就想用 bash ,然后坚持到了现在。 |
87 zhangxu1621 2024-11-13 20:54:37 +08:00 不如直接用 Warp |
88 9 2024-11-13 21:03:05 +08:00 @DualVectorFoil 这么多 fish 推荐,是因为题主说了除了 oh-my-zsh 还有什么推荐。论使用人数,还是 oh-my-zsh 的多,看 stars 数就知道 |
89 xliao 2024-11-13 21:09:18 +08:00 看下这个 https://blog.skk.moe/post/make-oh-my-zsh-fly/ 连接的 Profiling 章节 ```shell $ /bin/zsh $ zprof num calls time self name ----------------------------------------------------------------------------------- 1) 1 395.66 395.66 33.10% 395.59 395.59 33.09% _zsh_nvm_auto_use 2) 1 216.22 216.22 18.09% 216.13 216.13 18.08% nvm_die_on_prefix 3) 1 648.00 648.00 54.20% 168.85 168.85 14.12% nvm_auto 4) 2 479.15 239.57 40.08% 160.50 80.25 13.43% nvm 5) 1 102.30 102.30 8.56% 84.99 84.99 7.11% nvm_ensure_version_installed 6) 2 51.21 25.60 4.28% 29.55 14.78 2.47% compinit 7) 1 680.18 680.18 56.89% 22.17 22.17 1.85% _zsh_nvm_load 8) 2 21.66 10.83 1.81% 21.66 10.83 1.81% compaudit 9) 1 17.31 17.31 1.45% 17.31 17.31 1.45% nvm_is_version_installed 10) 193 17.43 0.09 1.46% 14.50 0.08 1.21% _zsh_autosuggest_bind_widget [Redacted] ``` |
90 zed1018 2024-11-13 21:09:48 +08:00 @synthpop123 同 zinit ,但是几乎没有易用性,一旦超出插件默认配置想自己搞点什么花样就非常复杂 |
91 ycqy 2024-11-13 21:27:59 +08:00 哈哈,换 fish 的话 oh-my-fish |
92 HongyuGao 2024-11-13 22:01:20 +08:00 不配置主题的话,其实用什么插件装什么插件就好了,没必要装个完整的 oh-my-zsh 。 |
93 aarontian 2024-11-13 22:05:42 +08:00 @littlewing +1 看帖子里这么密集推荐 fish ,我去折腾了 20 分钟,发现语法跟 bash 不兼容,除了迁移环境变量可能还少不了要来回切的场景,纯属增加认知负担了。。 |
94 WebKit 2024-11-13 22:37:10 +08:00 via Android fish 或者 zim |
95 jqtmviyu 2024-11-13 22:50:40 +08:00 如果你和我一样是 p10k 用户的话, 为什么不尝试 p10k 作者开发的 zsh4humans. 开箱即用, 不需要配置 关于 zsh 管理器启动速度的, 在 zim 仓库有相关图片, 我就是看了这张图片转到 zsh4humans. https://github.com/zimfw/zimfw |
96 SteveLi77 2024-11-13 23:01:42 +08:00 @AlexShui #11 windows terminal + cmd + starship + scoop 上装个 busybox , 基本上就是 linux 终端类似的体验了 |
97 Herdsman 2024-11-13 23:15:01 +08:00 正在尝试 WezTerm + Starship 慢慢配吧 |
98 coldle 2024-11-14 00:12:05 +08:00 via Android 好奇,担心 fish 写脚本不兼容的朋友方便说下场景吗?我平时在 fish 下跑 bash 脚本感觉没啥问题,环境变量也继承 |
99 shiltian 2024-11-14 01:53:50 +08:00 oh my zsh 要 1-2 秒?那也太慢了…可能是插件太多的缘故? |
100 zander 2024-11-14 08:24:37 +08:00 我在用 prezto ,很久没动过了。 |