Shell 历史与目录跳转的现代替代:atuin + zoxide
每天重复输入的内容里,有两类最浪费时间:一是翻命令历史找之前跑过的那条带很多参数的 curl,二是手打一串层层嵌套的目录路径。
atuin 解决第一个,zoxide 解决第二个。
atuin:把命令历史变成可搜索的数据库
默认的 zsh 历史记录是一个纯文本文件,Ctrl+R 只能按前缀匹配向上翻。atuin 把历史存进本地 SQLite 数据库,记录命令的执行时间、工作目录、退出码、耗时,然后提供一个交互式全文搜索界面。
安装
1 | brew install atuin |
集成到 .zshrc
在 ~/.zshrc 末尾加入:
1 | eval "$(atuin init zsh)" |
重新加载配置:
1 | source ~/.zshrc |
之后按 Ctrl+R 就会进入 atuin 的搜索界面,而不是原来的 zsh 历史翻找。
Ctrl+R 界面
进入界面后:
- 直接输入关键词做全文搜索,不需要记住命令开头是什么
↑↓方向键移动选中,Enter执行,Esc退出- 支持按前缀过滤:
1 | # 在搜索框里输入这些前缀来缩小范围 |
实际工作中最常用的是 cwd: 过滤——在一个项目目录里搜,不会翻出其他项目的干扰结果。
历史同步(可选)
atuin 支持跨设备同步命令历史,数据经过端对端加密后上传到 atuin 的云服务(也可以自己搭)。有多台 Mac 的话同步后 Ctrl+R 能看到所有设备的历史。
注册并登录:
1 | atuin register -u 用户名 -e 邮箱 -p 密码 |
不需要同步的话跳过这步,atuin 本地也完整可用。
zoxide:让 cd 记住你去过哪里
zoxide 是 cd 的替代品,核心逻辑是 frecency(频率 × 最近访问时间):你去过的目录都会被记录,之后输入路径关键词,zoxide 根据访问频率和时间自动匹配最可能的那个。
安装
1 | brew install zoxide |
集成到 .zshrc
1 | eval "$(zoxide init zsh)" |
默认会添加 z 和 zi 两个命令。如果想用 z 完全替换原来的 cd,可以用 --cmd cd 参数:
1 | eval "$(zoxide init zsh --cmd cd)" |
这样原来的 cd 命令也会指向 zoxide,不需要改任何习惯。
z 和 zi
z 直接跳转,zi 调出 fzf 交互界面选择:
1 | z blog # 直接跳到访问频率最高的包含 "blog" 的目录 |
zi 需要系统里装了 fzf,前几篇文章里已经装过了,直接可用。
路径是怎么学习的
第一次使用时 zoxide 没有任何记录,z 命令找不到目标会报错。正常用 cd 进入目录之后,zoxide 自动在后台记录。进过 10 个左右的目录之后,z 就开始有用了。也可以手动添加:
1 | zoxide add ~/code/github/blog-source |
查看当前数据库里记录了哪些目录以及对应的权重:
1 | zoxide query --list --score |
.zshrc 完整配置
把两个工具的初始化放到 .zshrc 的末尾:
1 | # atuin:增强命令历史,接管 Ctrl+R |
顺序无所谓,两者互不依赖。
从哪里开始
这两个工具的上手成本都极低,装完改一行配置就生效,不需要专门学习:
- atuin:装完之后按一次
Ctrl+R,感受一下全文搜索和过滤功能,之后照常用,习惯会自然形成 - zoxide:装完之后照常
cd进目录,积累几天记录之后试一次z 项目名,就能体会到省了多少路径
系列前几篇装过的 fzf,配合 zoxide 的 zi 命令效果更好——这也是工具链组合带来的放大效应。






