身為一名 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 配合使用