用 navi 把「偶尔用一次但总记不住」的 CLI 命令,变成你肌肉记忆的一部分
用 navi 把「偶尔用一次但总记不住」的 CLI 命令,变成你肌肉记忆的一部分
你一定有过这种经历:半年前用过一次 ffmpeg 剪切视频,今天想再跑一遍,命令flag全忘了。打开浏览器搜、复制粘贴、回来改参数——前后花了三分钟。
navi 想解决的就是这件事:让你在终端里用模糊搜索找到那条命令,直接执行,连复制粘贴都省了。
它是什么
navi(https://github.com/denisidoro/navi)是一个 Rust 写的交互式命令行速查工具,17,671 颗星,Apache 2.0 许可。它的核心逻辑很简单:
- 你有一个
.cheat文件库(自己写,或从社区拉) - 你在终端输入
navi,弹出一个 fzf 风格的模糊搜索框 - 输入关键词,比如
git checkout,所有相关条目列出来 - 选一个,它帮你把命令填进提示行,你确认后直接执行
语法长这样:
% git, code
# Change branch
git checkout <branch>
$ branch: git branch | awk '{print $NF}'
注意那个 $ branch: 行——navi 会先执行这段脚本,把结果作为可选参数动态展示。你不需要记分支名,它帮你查好。
怎么用
最基础的用法就是直接敲 navi。但它的用法远不止这一种:
Shell Widget(Ctrl-R 风格):装好后 eval "$(navi widget bash)",然后在 bash 里按 Ctrl-R,直接用 navi 搜索替代历史记录。好处是 shell history 里记录的是你真正跑的命令,而不是 navi 这个调用。
Tmux Widget:在任何远程 SSH 会话里都能用,适合团队共用服务器的场景。
Shell Scripting:把 navi 集成进自己的脚本里,做成交互式参数填充界面。
导入其他格式:tldr、cheat.sh 的内容可以直接导进来用,不用从头写。
安装只要一行:
brew install navi
也支持 Gentoo、Nix、Cargo 等方式,详见 https://github.com/denisidoro/navi。
适合谁 / 不适合谁
适合:
- 经常在终端里操作但记不住所有 flag 的开发者
- 需要在多台机器上保持一致命令习惯的 DevOps/SRE
- 团队需要共享”这条命令是我们处理某类问题的标准方式”的场景
不适合:
- 纯 GUI 用户,几乎不用终端——navi 对你没有意义
- 想要图形界面的速查工具——navi 是纯 TUI,没有 Web/桌面版
- 期待它能自动推荐”今天该学什么”——它只响应你的搜索,不做主动推荐
和同类比怎么样
如果你用过 tldr、cheat.sh,会发现 navi 的定位不太一样:
| tldr | cheat.sh | navi | |
|---|---|---|---|
| 交互方式 | 查 → 展示 | 查 → 展示 | 搜索 → 选择 → 直接执行 |
| 参数填充 | 无 | 无 | 有(动态执行子查询) |
| 自定义 | 只能贡献上游 | 只读 | 完全自己写 |
| 执行命令 | 手动复制 | 手动复制 | 直接执行 |
| 维护者活跃度 | 活跃 | 活跃 | 活跃(v2.24.0 于 2023年1月) |
核心差异在于 navi 真正把”查”和”执行”打通了。你不需要先查出来、再关掉浏览器、再去终端粘贴——它直接把你选中的命令放到提示行,你Enter就执行。
安全上需要注意什么
一个会帮你执行命令的工具,自然绕不开安全问题。有一篇专门的安全review(https://mrkeyoor.com/repos/navi)值得一读。简单说:
- navi 默认只调用 Homebrew 和 Git 安装内容,不会有隐蔽的网络请求
- 它不追踪你输入的内容
- 但如果你从第三方仓库导入 cheatsheet,那些文件本质上是可以包含任意 shell 脚本的——只导入你信任的来源
建议把常用的 .cheat 文件放进 Git 仓库,做代码审查。
社区在怎么用
X-CMD 做了一个 navi 的中文安装指南(https://www.x-cmd.com/install/navi),把 navi 集成进了他们的命令行工具生态。
DEV Community 有一篇 2026年8月发的入门帖(https://dev.to/githubopensource/forget-cli-headaches-discover-navi-your-interactive-command-line-cheatsheet-549i),角度是”给 CLI 新手的效率工具”。
有个博主分享了自己如何用 navi 管理 git、docker、kubectl 三套 cheatsheet,配合 shell widget 做到”命令不用背,搜索即执行”的工作流(https://writeloop.dev/posts/how-i-use-navi-for-cli-cheatsheets/)。
值得注意的边界
- navi 本身不会帮你学命令——它只是降低了你查到之后的执行成本。如果你想真正记住那些 flag,还是得用抽认卡或反复实践。
- 它依赖 fzf 或 skim。如果你用 zsh + zsh-users/zsh-history-substring-search 之类的插件,可能需要额外配置。
- cheatsheet 数量多了之后首次加载会变慢,有用户在 CSDN 上发了性能优化指南(https://blog.csdn.net/gitblog_00616/article/details/155279528),涉及路径配置和延迟加载策略。
下一步建议
如果这个场景戳中你了,有三条路可以选:
最快上手:装好 navi,用内置的 navi repo add 拉一个你常用的工具库(比如 git、docker),感受一下从”查手册”到”直接执行”的体验差异。
团队落地:把团队里常用的命令写成 .cheat 文件,放进一个私有的 Git 仓库,用 navi import 导入。让新人 onboarding 的成本从”问 senior 这个咋跑”变成”navi 搜索一下”。
深度定制:研究一下 navi 的 $ variable 语法和 shell widget 集成,把 navi 做成你日常 shell 的默认命令补全层——不是 IDE 给的那种,而是你真正在本地跑过、验证过的那些 one-liner。
项目地址:https://github.com/denisidoro/navi
你用 navi 解决过什么问题?欢迎评论分享你的 cheatsheet 库结构。
评论区
登录后可评论。