基本设置
sh
# 不保留历史记录
export SAVEHIST=0环境变量
sh
export PATH=/Users/ryan/.flutter/flutter/bin:$PATH
export PUB_HOSTED_URL=https://pub.flutter-io.cn命令别名
sh
alias myip="ifconfig | grep inet\ "
alias chrome="open -n /Applications/Google\ Chrome.app/ --args --disable-web-security -incognito --user-data-dir=/Users/ryan/MyChromeDevUserData/"补全系统(zsh 内置,零依赖)
sh
# compinit 是一切智能补全的来源(git/kill/ssh 的选项、进程、分支等)
# 位置:必须放在 .zshrc 前部,先于任何依赖 compdef 的代码
# (例:vite-plus 的 env 里有 compdef _vpr_complete vpr,顺序反了会静默失效)
autoload -Uz compinit && compinit
# 多候选时进入列表选择(方向键 + 高亮,回车接受,ESC 退出)
zstyle ':completion:*' menu select
# 不区分大小写(saf<Tab> → Safari)
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}'
# 列表上色(macOS 无 GNU ls,LS_COLORS 为空,必须直接写配色)
# 目录蓝 34 / 链接青 35 / 可执行红 31 / 管道黄 33 / socket 绿 32
zstyle ':completion:*' list-colors 'di=34:ln=35:ex=31:pi=33:so=32:bd=34;46:cd=34;43'
# 候选按类型分组显示(标题文字来自系统补全函数,为英文)
zstyle ':completion:*' group-name ''
zstyle ':completion:*:descriptions' format '%F{yellow}── %d ──%f'
zstyle ':completion:*:warnings' format '%F{red}── 无匹配 ──%f'
# 近似匹配:打错也能补(最多 2 个字符错,如 git chekout<Tab>)
zstyle ':completion:*' completer _complete _ignored _approximate
zstyle ':completion:*:approximate:*' max-errors 2 numeric
# 光标在词中间也能补全,补完跳词尾
setopt COMPLETE_IN_WORD ALWAYS_TO_END
# 检查是否生效:非 0 即已启用(正常 1700+ 条)
echo ${#_comps}历史记录增强
sh
setopt HIST_IGNORE_ALL_DUPS
setopt SHARE_HISTORY EXTENDED_HISTORY # 多窗口实时共享 + 时间戳
export HISTCONTROL=ignoreboth:erasedups
HISTSIZE=20000 # 系统默认仅 2000/1000
SAVEHIST=20000编辑手感
sh
# ↑↓ 按已输入内容前缀搜索历史(只翻以当前输入开头的命令)
# 普通模式和应用模式序列都要绑:zle 编辑时 Ghostty 发的是应用模式序列
bindkey '^[[A' history-search-backward
bindkey '^[OA' history-search-backward
bindkey '^[[B' history-search-forward
bindkey '^[OB' history-search-forward
setopt AUTO_CD AUTO_PUSHD PUSHD_IGNORE_DUPS # 输目录名直接进;cd 自动入栈
setopt NO_BEEP NO_FLOW_CONTROL # 关蜂鸣;Ctrl+S 不再冻屏踩坑记录
- zstyle 单独写没用:必须 compinit 先跑过,否则
_comps这个参数都不存在(实测:只设 zstyle 时它为空) - compinit 的位置是硬性要求:必须在任何调用
compdef的代码之前,否则那些注册静默失效、无报错 - 只对某个命令启用菜单:context 必须写全 6 段,少一段会匹配到错误字段(官方文档明确警告)sh
zstyle ':completion:*:*:app:*:*' menu select # 仅对 app 命令生效 compstate[insert]=menu不是列表菜单:它启动的是 menu completion(命令行循环补齐);列表菜单是 zsh/complist 的 menu selection,由 zstyle 的select关键字控制- 没有 compinit 时的 Tab:
^I绑定expand-or-complete,只有基础文件名/命令补全(zsh 内置,不需要补全系统) - 启动开销:compinit 增量约 20–30ms,可忽略
- 方向键序列:TERM=xterm 下 terminfo 的 kcuu1/kcud1 是应用模式序列
^[OA/^[OB,普通模式是^[[A/^[[B;要绑都绑