navi 交互式命令行速查工具:告别记不住命令的尴尬
作为一名 Linux 用户,你是否经常遇到这种情况:明明知道某个命令能完成任务,却死活想不起具体的参数?或者面对复杂的 ffmpeg、kubectl命令时,不得不打开浏览器搜索语法?
今天介绍一款能彻底解决这个问题的神器——navi,一个交互式的命令行速查工具。
什么是 navi?¶
navi 是一个用 Rust 编写的交互式 cheatsheet 工具,它允许你在终端中直接浏览和执行命令示例,而无需离开当前工作环境。
核心特性¶
- 🚀 交互式搜索:支持 fuzzy search,快速找到需要的命令
- 📝 变量替换:命令中的参数可以动态输入,避免手动编辑
- 🎨 高度可定制:支持自定义颜色、字体和布局
- 📦 社区驱动:内置常用工具的 cheatsheet,也支持导入社区资源
- 🔌 Shell 集成:支持 Bash、Zsh、Fish 等主流 Shell
为什么选择 navi 而不是 tldr?¶
你可能听说过 tldr,它也是一个流行的命令行速查工具。那么 navi 有什么优势呢?
| 特性 | tldr | navi |
|---|---|---|
| 交互方式 | 静态展示 | 交互式选择 |
| 变量替换 | ❌ 不支持 | ✅ 支持动态输入 |
| 自定义 cheatsheet | 有限 | 完全自定义 |
| 命令执行 | 手动复制粘贴 | 可直接执行 |
| 搜索体验 | 基础 | Fuzzy search |
简单来说:tldr 适合快速查看命令语法,navi 适合实际执行命令。
安装 navi¶
方法一:使用包管理器(推荐)¶
Fedora/RHEL/CentOS:
sudo dnf install navi
Ubuntu/Debian(需要先添加仓库):
sudo add-apt-repository universe
sudo apt update
sudo apt install navi
Arch Linux:
sudo pacman -S navi
macOS(Homebrew):
brew install navi
方法二:使用 Cargo(Rust 包管理器)¶
如果你已经安装了 Rust:
cargo install navi
方法三:下载二进制文件¶
从 GitHub Releases 下载预编译的二进制文件:
# 下载最新版本(以 v2.23.0 为例)
wget https://github.com/denisidoro/navi/releases/download/v2.23.0/navi-v2.23.0-x86_64-unknown-linux-musl.tar.gz
# 解压
tar -xzf navi-v2.23.0-x86_64-unknown-linux-musl.tar.gz
# 移动到系统路径
sudo mv navi /usr/local/bin/
配置 Shell 集成¶
安装完成后,需要在 Shell 配置文件中添加集成代码。
Bash¶
编辑 ~/.bashrc,添加:
eval "$(navi widget bash)"
Zsh¶
编辑 ~/.zshrc,添加:
eval "$(navi widget zsh)"
Fish¶
编辑 ~/.config/fish/config.fish,添加:
navi widget fish | source
配置完成后,重新加载 Shell 配置:
source ~/.bashrc # 或 ~/.zshrc
基本使用¶
1. 搜索命令¶
最简单的用法是直接搜索:
navi
这会打开一个交互式界面,你可以输入关键词搜索命令。例如输入 git,会显示所有 Git 相关的 cheatsheet。
2. 使用 Widget(推荐)¶
配置好 Shell 集成后,可以使用快捷键调用 navi:
- Bash/Zsh:
Ctrl + G - Fish:
Ctrl + G
按下快捷键后,会弹出搜索界面,选择命令后可以直接填充到命令行。
3. 查看特定工具的 cheatsheet¶
navi --query git
navi --query docker
navi --query kubectl
4. 执行命令¶
在 navi 界面中选择命令后,可以:
- 按
Enter:将命令填充到 Shell - 按
Ctrl + Y:直接执行命令 - 按
Esc:取消
自定义 Cheatsheet¶
navi 的强大之处在于支持完全自定义的 cheatsheet。
创建个人 cheatsheet¶
在 ~/.config/navi/ 目录下创建 .cheat 文件:
mkdir -p ~/.config/navi
vim ~/.config/navi/my_tools.cheat
Cheatsheet 格式¶
# 标题
% git 常用命令
# 命令描述
$ 查看当前分支状态
git status
# 带变量的命令
$ 切换到指定分支
git checkout <branch>
# 带注释的变量
$ 创建新分支并切换
git checkout -b <branch>
%% branch: 新分支名称
# 多个变量
$ 提交代码
git commit -m "<message>"
%% message: 提交信息
# 带默认值的变量
$ 推送分支
git push <remote> <branch>
%% remote: 默认值 origin
%% branch: 当前分支名
变量类型¶
navi 支持多种变量类型:
# 文本输入
%% name: 请输入名称
# 带默认值
%% port: 默认值 8080
# 选择列表
%% method: 默认值 GET, 可选值 GET POST PUT DELETE
# 命令输出作为选项
%% branch: 命令 git branch --format='%(refname:short)', 反引号包裹
实用示例:Docker cheatsheet¶
% Docker 常用操作
$ 查看运行中的容器
docker ps
$ 查看所有容器(包括已停止)
docker ps -a
$ 启动容器
docker start <container>
%% container: 命令 docker ps -a --format '{{.Names}}'
$ 停止容器
docker stop <container>
%% container: 命令 docker ps --format '{{.Names}}'
$ 删除容器
docker rm <container>
%% container: 命令 docker ps -a --format '{{.Names}}'
$ 查看容器日志
docker logs -f <container>
%% container: 命令 docker ps --format '{{.Names}}'
$ 进入容器
docker exec -it <container> <shell>
%% container: 命令 docker ps --format '{{.Names}}'
%% shell: 默认值 /bin/bash, 可选值 /bin/bash /bin/sh
导入社区 Cheatsheet¶
navi 社区维护了大量常用工具的 cheatsheet,可以直接导入。
使用 navi 内置功能¶
# 浏览可用的 cheatsheet 仓库
navi repo add denisidoro/navi
# 或者手动添加
navi repo add https://github.com/denisidoro/cheats
推荐的 Cheatsheet 仓库¶
- denisidoro/cheats - 官方维护的通用 cheatsheet
- sv222/kubectl-autocompletion-navi - Kubernetes kubectl 命令
- ormico/navi-cheatsheets - 各种开发工具 cheatsheet
高级技巧¶
1. 使用标签组织命令¶
% 系统管理
tags: system
$ 查看磁盘使用
df -h
$ 查看内存使用
free -h
% Git 操作
tags: git, version-control
$ 查看提交历史
git log --oneline
2. 条件变量¶
$ 根据环境部署
deploy <environment>
%% environment: 可选值 dev staging production
%% 如果 environment = production: echo "⚠️ 生产环境部署,请确认!"
3. 调用外部脚本¶
$ 备份数据库
./scripts/backup.sh <database>
%% database: 命令 mysql -e "SHOW DATABASES;" | tail -n +2
4. 自定义颜色主题¶
编辑 ~/.config/navi/config.yaml:
style:
tag:
color: blue
width: 20
comment:
color: yellow
snippet:
color: green
实际应用场景¶
场景一:快速执行复杂命令¶
需要定期清理 Docker 资源?创建一个 cheatsheet:
% Docker 清理
$ 删除所有停止的容器
docker container prune -f
$ 删除未使用的镜像
docker image prune -f
$ 删除所有未使用的资源
docker system prune -f
以后只需 Ctrl + G,搜索 "docker 清理",一键执行。
场景二:团队协作标准化¶
将团队的常用操作写成 cheatsheet,放在共享仓库:
# 团队仓库
git clone https://github.com/your-team/team-navi-cheats.git ~/.config/navi/team
# 在 config.yaml 中添加
paths:
- ~/.config/navi/team
新成员加入后,立即拥有标准化的操作手册。
场景三:学习新工具¶
学习 Kubernetes 时,导入 kubectl cheatsheet:
navi repo add https://github.com/sv222/kubectl-autocompletion-navi
边学边用,快速上手。
常见问题¶
Q: navi 和 fish shell 的 autospawn 冲突怎么办?¶
A: 在 fish 配置中调整加载顺序,确保 navi widget 最后加载。
Q: 如何备份我的自定义 cheatsheet?¶
A: 将 ~/.config/navi/ 目录纳入版本控制:
cd ~/.config/navi
git init
git add .
git commit -m "Initial navi cheatsheets"
# 推送到私有仓库
Q: 中文显示乱码?¶
A: 确保终端和字体支持中文,或在 config.yaml 中设置:
terminal:
font: "Noto Sans Mono CJK SC"
总结¶
navi 是一款能显著提升命令行效率的工具,特别适合:
- ✅ 经常使用复杂命令的开发者
- ✅ 需要快速切换不同工具上下文的多面手
- ✅ 希望标准化团队操作的 Tech Lead
- ✅ 正在学习新工具的初学者
项目信息: - GitHub: https://github.com/denisidoro/navi - 语言:Rust - Stars: 16,400+ - 许可证:Apache-2.0
花 30 分钟配置 navi,未来每天节省 10 分钟搜索命令的时间。这笔投资,值得!
相关阅读: - tldr-pages/tldr - 简化版 man pages - cheat.sh - 无需安装的在线 cheatsheet - fzf - 通用 fuzzy finder,可与 navi 配合使用
