navi-interactive-cheatsheet-tool

身為一名 Linux 使用者,你是否經常遇到這種情況:明明知道某個命令能完成任務,卻怎麼也想不起具體的參數?或者面對複雜的 ffmpegkubectl 命令時,不得不打開瀏覽器搜尋語法?

今天介紹一款能徹底解決這個問題的神器——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/ZshCtrl + G
  • FishCtrl + 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 軟體庫

進階技巧

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 配合使用