V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
bigbugbag
V2EX  ›  程序员

macOS 中有 Oh My Zsh 的上位替代么?

  •  1
     
  •   bigbugbag · 4 天前 · 10975 次点击

    新购入了一台 Mac ,准备不迁移环境而是从头配置一下环境,现在准备安装 shell 插件了。

    之前一直用着 Oh My Zsh ,确实很好用,但是感觉初始化时间越来越长,一个新的 session 要 1 ~ 2 秒才初始化完成,可能是插件有点多了,而且看有人说 Oh My Zsh 的性能差点意思。

    问下各位现在有 Oh My Zsh 的上位替代么?可以从使用体验、易用度、生态、性能之类的方面讲讲。

    第 1 条附言  ·  3 天前
    感谢大家的讨论。

    对我来说受益较多的评论是 @Kobayashi #31 @xliao #89 @wukaige #102

    我应该还是会继续使用 OMZ ,理由如下:

    1. 当前最大的社区,开发人员多,项目不容易暴毙,有问题也比较好解决
    2. 比较熟悉,换成其他的多了一点点学习成本
    3. 砍掉高耗时插件后,初始化时间可以接受

    如果有人能讲一下如何排查与优化 hook 耗时(回车耗时)就完美了。
    124 条回复    2024-11-15 18:20:55 +08:00
    1  2  
    Dragonphy
        101
    Dragonphy  
       3 天前
    fish ,至于不兼容 bash 的问题,执行的时候切过去不就行了。`bash xx.sh`
    wukaige
        102
    wukaige  
       3 天前   ❤️ 1
    ```
    # zsh boot time report
    start=$(date +%s.%N)
    zmodload zsh/zprof

    ...

    zprof | head -n 20; zmodload -u zsh/zprof
    echo "Runtime was: $(echo "$(date +%s.%N) - $start" | bc)"
    ```

    用 zprof 看看耗时的是哪些插件,然后着手优化就像,之前 zsh shell 启动需要 1s 左右,砍掉大部分耗时插件再用 zinit 延迟加载,现在只要 0.1 s 左右。
    bigbugbag
        103
    bigbugbag  
    OP
       3 天前
    @wukaige 非常感谢,看样子在我的环境中是 nvm 、conda 、jenv 的锅,其他时间都非常短。

    这个方法可以用来统计 hook 的耗时么?我在命令行中敲回车也有明显的延迟,想知道是什么 hook 影响到了这个速度。
    bigbugbag
        104
    bigbugbag  
    OP
       3 天前
    @Kobayashi 请问有排查回车耗时的方法么?
    lancelock
        105
    lancelock  
       3 天前
    不理解为什么纠结 fish 语法不兼容,我用 fish 是为了开箱即用的命令补全提示、历史记录,脚本还用 bash 语法写呗,执行的时候直接用 bash 执行不就完了,也不用切换什么啊
    gefangshuai
        106
    gefangshuai  
       3 天前
    耗时的问题可以解决,你应该是配置了什么环境变量导致的,网上关于 omz 提速的文章也有很多,排查一下到底是哪个环境导致,删掉。比如 nvm
    bycgxss
        107
    bycgxss  
       2 天前
    不用 OMZ ,使用 Warp 终端
    aloxaf
        108
    aloxaf  
       2 天前
    p10k 作者有个工具,你可以用它来测试你的 prompt 耗时: https://github.com/romkatv/zsh-prompt-benchmark

    确定耗时以后,可以用二分法来排查是哪个插件在拖慢你的 prompt ,也可以现用 typeset -pm '*_functions' 来查看当前有那些 hook 来缩小范围
    zhangchongjie
        109
    zhangchongjie  
       2 天前
    @PTLin 大佬,zellij 在 mac 下怎么配认随终端起用呀
    vvv7000
        110
    vvv7000  
       2 天前
    @jqtmviyu 试用了一下,发现如果在安装时选择了开启 tmux 的话,那么同时只能开启一个终端?如果有同时开启多个终端的需求有办法解决吗
    PTLin
        111
    PTLin  
       2 天前
    @zhangchongjie 我是 Linux ,直接在.zshrc 里最后一行贴的 eval "$(zellij setup --generate-auto-start zsh)"
    jqtmviyu
        112
    jqtmviyu  
       2 天前
    @vvv7000 #110 我用 kitty, 不需要 tmux.
    houshuu
        113
    houshuu  
       2 天前
    你的问题其实只是 zsh 插件管理器太慢了而已。
    建议换用 zinit ,非常快。我现在自己在用的是 sheldon ,写 toml 非常容易管理。这两个都支持延迟加载。

    fish 是不推荐的,因为 zsh 几乎所有系统都带了,你可以把配置放到所有服务器和本地机器上,完全无缝体验。
    学生时代我也爱用 fish ,现在全 zsh 了,脚本自己也容易写,随时打包一些工作流到 zsh 函数里。

    以前还怀念 fish 补全,现在用上 Aloxaf/fzf-tab ,补全非常的轻松。
    历史记录直接用 fzf 绑定 c-r 就行了。
    fzf 基本是现在终端搜索功能的天花板了。
    zjiajun
        114
    zjiajun  
       2 天前
    还是用 omz 的吧,插件多一些,分析启动慢学到了,备用下
    mrzhangrb
        115
    mrzhangrb  
       2 天前
    @tinytoadd #7 zsh4humans 老哥 感谢。 这个太强了
    qfly
        116
    qfly  
       2 天前 via Android
    fish 我也是因为 omz 初始化太慢才换的,但 fish 和 zsh 或者 bash 不太兼容
    beyondgamp
        117
    beyondgamp  
       2 天前 via iPhone
    学习一下
    SiLenceControL
        118
    SiLenceControL  
       2 天前
    不妨推荐一下 omz 用哪些插件?
    houshuu
        119
    houshuu  
       2 天前
    楼上如果爱用 omz 插件一样可以转的,几乎其他所有的插件管理器都支持直接用 omz 插件。
    而且与其说是 omz 插件,其实是 omz 团队提供的 zsh 插件。

    比如 zinit 可以用

    ```
    zi snippet OMZ::lib/clipboard.zsh
    ```

    定义
    Ipsum
        120
    Ipsum  
       1 天前
    看完了,试下了 fish+starship 。感觉挺顺手的。
    casstiel
        121
    casstiel  
       1 天前
    wukaige
        122
    wukaige  
       1 天前   ❤️ 1
    @bigbugbag #103

    可以的,开启 zmodload zsh/zprof 后,在 zsh 里面按几次回车键,再运行 zprof ,会显示函数调用次数与耗时,类似于下面这种:

    2) 10 397.99 39.80 14.63% 397.99 39.80 14.63% _atuin_preexec
    tinytoadd
        123
    tinytoadd  
       1 天前
    @casstiel my god 正是我需要的。

    话说 jorgebucaran 这哥们做了好多对 fish 社区有用的插件呀,真乃大神也
    wensonsmith
        124
    wensonsmith  
       1 天前
    fish + fisher (插件管理) + Pure(主题) + Starship(Prompt) + Warp

    丝滑
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2632 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 03:02 · PVG 11:02 · LAX 19:02 · JFK 22:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.