mac下codex completion修正(command not found: compdef))

问题

# codex 命令自动补全
codex completion zsh > ~/.zshrc.d/codex-completion.sh

1. 问题本质(Root Cause)

compdef 是 zsh completion framework 的函数,但它依赖 compinit 初始化后才存在。

你这个报错:

command not found: compdef

说明:

  • 当前 shell 执行到了 completion 脚本(codex-completion.sh)
  • zsh completion system 还没初始化
  • 所以 compdef 这个函数不存在

👉 关键机制:

compinit → 注册 completion system → 提供 compdef

如果没执行 compinit,就会报错


2. 快速修复方案

2.1在 .zshrc 顶部初始化 completion

1
2
3
# add
autoload -Uz compinit
compinit

👉 必须放在 所有 completion 脚本之前

例如:

1
2
3
4
5
6
# 必须最前
autoload -Uz compinit
compinit

# 你的 codex
source ~/.zshrc.d/codex-completion.sh

这是最标准修复方式

2.2推荐工程化配置

1
2
3
4
5
6
7
8
9
10
# ~/.zshrc

# 1. 初始化核心能力
autoload -Uz compinit
compinit

# 2. 加载模块
for f in ~/.zshrc.d/*.sh; do
source $f
done

👉 这样可以避免:

  • 插件提前执行
  • completion 未加载

3. 最优实践

1
2
3
4
5
6
7
8
9
10
11
12
13
# ~/.zshrc(标准化模板)

# 1. 初始化 zsh completion
autoload -Uz compinit
compinit

# 2. 加载插件/框架
# source $ZSH/oh-my-zsh.sh

# 3. 加载自定义脚本
for f in ~/.zshrc.d/*.sh; do
source $f
done