Lazy loaded image
Zsh 与 zinit 终端包管理
Words 4346Read Time 11 min
2025-9-29
2025-11-10
date
related_level
slug
type
relate_date
summary
status
tags
category
last_updated
Nov 10, 2025 10:03 PM
是否已更新
orginal_page
是否推荐
 
参考资料
安装 zsh
安装并设置 oh-my-zsh 主题
安装 oh-my-zsh
oh-my-zsh 一键安装脚本
  • 国内源
    • sh -c "$(curl -fsSL https://gitee.com/pocmon/ohmyzsh/raw/master/tools/install.sh)"
  • 国外源
    • sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
手动安装
下载安装脚本并更改为国内源
  • wget https://gitee.com/mirrors/oh-my-zsh/raw/master/tools/install.sh
  • vim install.sh
    添加运行权限并运行
    • chmod u+x ./install.sh
    • ./install.sh
    设置主题为 agnoster
    (可选)设置主题为 powerlevel10k
    需要设置推荐字体以支持 powerlevel10k 主题正常显示
    • macos 下只需终端执行以下指令安装所需字体 hack-nerd-font
      • brew install font-hack-nerd-font
    解决 oh-my-zsh 主题字体显示乱码问题
    • 清楚一点:字体乱码是显示终端的问题,与服务器无关,以下操作都是在客户端进行
    测试用特殊字符
    安装所需字体包
    • Windows系统
      配置终端显示字体
      • 字体改成 DejaVu Sans Mono for Powerline
        • powerlevel10k 主题用 MesloLGS NF
      VScode
      • File → Preference → Settings
      • 修改 terminal.integrated.fontFamily
      Putty客户端
      • Window → Appearance
      • 修改 Font Settings
      Microsoft Terminal
      • Ctrl+, 打开设置标签页
      • 配置文件 → 默认值 → 外观 → 文本 → 字体
      powerlevel10k 主题字体问题
      手动更新 oh-my-zsh
      • omz update
      Zsh 插件
      常用插件
      语法高亮 zsh-syntax-highlighting
      • git clone https://github.com/zsh-users/zsh-syntax-highlighting ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
      命令自动建议 zsh-autosuggestions
      • git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
      命令行补完 compleat
      参考资料
      安装 Haskell Stack
      • curl -sSL https://get.haskellstack.org/ | sh
        • 要安装到根目录需要 sudo sh
      添加国内源至系统全局配置文件 /etc/stack/config.yaml
      • 没有的话需要创建对应路径及文件
        • sudo mkdir /etc/stack && sudo touch /etc/stack/config.yaml
      • 或者添加至用户级全局配置文件 ~/.stack/config.yaml
      添加 ~/.local/bin 至 PATH 变量(如无)
      • bash
        • vim ~/.bash_profile
      • zsh
        • vim ~/.zprofile
      • 添加以下行
        • PATH=$PATH:$HOME/.local/bin:$HOME/bin
      下载并安装 compleat
      • git clone https://github.com/mbrubeck/compleat.git
      • make install
        • 得到 ~/.local/bin/compleat 二进制文件和 ~/.bash_completion.d/compleat_setup 脚本
      修改终端 shell 配置以使用 compleat
      bash
      • 添加脚本至 .bashrc 文件
        • source ~/.bash_completion.d/compleat_setup
      zsh
      • sudoedit /etc/zsh/zshrc
        • 修改 compinit 部分
      安装 .usage 文件
      • 全局安装 /etc/compleat.d
        • sudo mkdir /etc/compleat.d && sudo cp examples/* /etc/compleat.d
      • 本地安装 ~/.compleat
        • mkdir ~/.compleat && cp examples/* ~/.compleat
      重启终端 shell
      • exec bash
      • exec zsh
       

      基于 zinit 的终端工具包管理

      参考资料
      • 很多终端插件或工具都可以从 github 下载并安装, zinit 就是为了管理这些工具而设计的
        • 相比 zsh 自带的插件管理而言, zinit 具有 lazyload 功能从而加速启动
        • 除了 zsh 插件之外, 通过自行编写加载的修饰符可以适配绝大部分 github 库
      • 默认从 github clone 获取对应库代码, 也可以通过 release 获取安装包
        • 格式为 <username>/<repo>
      修饰符 icezinit load, zinit light
      • zinit ice 后面跟的一些关键词会使用到最近的 zinit load
      • 延迟 0.1 秒加载 fzf 作为插件
        • zinit wait"0.1" from"gh-r" as"program"
        • zinit load @junegunn/fzf
      • load 同样加载插件, light 会跳过插件元数据解析
        • 正常使用 load 时,Zinit 会查找插件中的 .plugin.zshinit.zsh 等标准入口文件,并处理其依赖、别名等
      进阶修饰符 zinit for
      • 相比于 ice 只能适用于最近一次 load, for 可以对一连串的项目使用相同的关键字
      • 其余除了部分关键字不通用外都相同
        • for 只能用 light-mode 关键字, 没有 light 指令
      一些常用关键字
      wait""
      • 延迟 x 秒加载
      • lucid
        • 静默加载,不显示 Loaded... 提示
      • light-mode
        • 相当于 light 指令, 但用于修饰 for 指令
      as""
      • as"program"
        • 加载路径到 PATH 而非 source
      • as"completion"
        • 作为补全加载, 一般适用于 snippet
      • as"null", as""
        • 相当于 pick"/dev/null" nocompletions
        • 禁用 source 且不加载补全
      id-as""
      • 创建别名, 一般与 snippet 一起使用
      • 对于文件名不规范的补全文件特别有效
        depth""
        • 设置 git 的 --depth 选项
        from""
        • from"gh" 从 github release 直接下载, 不用 clone 整个项目
        • "" 可以是完整的域名
        • 对 snippet 无效
        bpick""
        • 选择从 github release 下载的文件, 适用于 release 有多个文件且文件不规范导致自动解析出错下载了
        • 选择文件名含 Darwin 的 release 文件
          • from"gh-r" bpick"*Darwin*"
        pick""
        • 选择要 source 的脚本文件, 可以写 pattern 匹配多个文件
          • pick"*.plugin.zsh"
        • 路径是相对于插件文件夹内的路径
        mv"", cp""
        • 同 mv, cp 指令, 但在插件初始化之后执行, 一般用于提取安装包的文件到合适路径
        • 也可以用于重命名
        atinit"", atclone"", atpull"", atload""
        • 在对应期间执行一些操作
        • atload 加载别名, 这样可以不用分开管理 alias
        src""
        • 选择额外的 source 文件, 会在 pick 之后运行
        关键字执行顺序
        • atinit -> atpull! -> make'!!' -> mv -> cp -> make! -> atclone/atpull -> make -> (plugin script loading) -> src -> multisrc -> atload
        一些基础插件
        zsh 插件
        • 主要包含 completions, highlight, history-search 和 fzf
        zinit 插件
        • zinit depth"1" for \ zdharma-continuum/zinit-annex-as-monitor \ zdharma-continuum/zinit-annex-bin-gem-node \ zdharma-continuum/zinit-annex-patch-dl \ zdharma-continuum/zinit-annex-rust
        • 安装 zinit-annex-bin-gem-node 可使用 sbin 修饰符
          • 默认的 as”program” 会添加路径到 PATH 变量, 太长不美观
        管理 zinit 安装
        • zinit zstatus
          • 查看状态
        • zinit plugins
          • 查看插件列表
        • zinit completions
          • 查看补全列表
        • zinit snippets
          • 查看代码片段列表
        • zinit delete 删除已有插件或 snippet
        • zinit cuninstall 删除已有补全
        • zinit cclear 清理补全列表
          • 适用于添加错误且已删除的补全
        • zinit cdclear 清理按需加载补全(compdef)重放列表
        • zinit compinit 刷新补全
         

        基于 zinit 的个人 zsh 配置

        • 插件和补全加载部分放到 ~/.config/zsh/*.zshrc 文件, 不同节点根据需要加载不同配置
        vim ~/.zshrc
        vim ~/.config/zsh/00.plugins.zinit.zshrc
        • 主要会用到 sbin 修饰符
        vim ~/.config/zsh/01.core.zshrc
        • 核心插件和 fzf
        vim ~/.config/zsh/02.plugins.omz.zshrc
        • omz 插件
        上一篇
        Go 语言学习笔记
        下一篇
        交叉编译 Openwrt 平台可用的 nginx 和需要的动态模块

        Comments
        Loading...