如何在 macOS/Linux/Windows 安裝 ripgrep (rg):正則搜尋與 .gitignore
三大平台安裝 rg,跑第一條正則搜尋,並理解 .gitignore 如何過濾結果。
要在程式庫裡快速搜字串,ripgrep(命令 rg)比 grep -r 更省事:預設尊重 .gitignore,用 Rust 寫的並行搜尋也快。本教學走 hereink 讀者常用的 macOS、Linux 與 Windows 官方安裝路徑。
檢索詞是如何安裝 ripgrep 並用正則搜尋。讀完應能在專案根目錄跑第一條 rg,並知道怎樣讓結果自動跳過被忽略的檔案。
ripgrep 解決什麼問題
比 grep 少踩坑
grep -r 會掃進 node_modules、dist 和 .git,輸出爆炸。rg 預設讀 .gitignore、.ignore 和全域忽略規則,適合日常在程式庫裡找符號。
正則夠用就好
rg 使用 Rust 正則引擎,支援 \d、分組、行首行尾等常見寫法。不需要背全 POSIX;先會字面量、大小寫和檔案類型過濾就能覆蓋八成場景。
在終端確認版本:
rg --version。官方倉庫:github.com/BurntSushi/ripgrep。
在三大系統安裝 rg
- 1macOS(Homebrew)
已裝 Homebrew 時執行
brew install ripgrep。驗證:which rg與rg --version。Apple Silicon 與 Intel 共用同一公式。 - 2Linux(發行版套件)
Debian/Ubuntu:
sudo apt update && sudo apt install ripgrep。Fedora:sudo dnf install ripgrep。Arch:sudo pacman -S ripgrep。若倉庫版本過舊,可從 GitHub Releases 下載對應架構的 tarball 解壓並把rg放進PATH。 - 3Windows
在 PowerShell 或終端執行
winget install BurntSushi.ripgrep.MSVC,或從 GitHub Releases 安裝 MSI。Scoop 使用者:scoop install ripgrep。新開終端後跑rg --version。 - 4可選:用 Rust 安裝
已裝 Rust 工具鏈時:
cargo install ripgrep。編譯較慢,但適合套件管理器沒有 rg 的環境。
基礎正則搜尋
# 字面量(預設大小寫敏感)
rg "useState" src/
# 忽略大小寫
rg -i "error" .
# 正則:以 function 開頭的行
rg "^function\s+\w+" --type js
# 只列檔名
rg -l "TODO" .
# 顯示行號並帶上下文
rg -n -C 2 "api/v1" 在程式庫根目錄執行時,rg 會沿目錄向上查找 .git 以定位專案根,並套用該處的忽略規則。
尊重 .gitignore 與例外
| 需求 | 命令 | 說明 |
|---|---|---|
| 預設行為 | rg pattern | 自動跳過 .gitignore 中的路徑 |
| 也搜被忽略檔案 | rg --no-ignore pattern | 除錯產物或本機設定時用,輸出會很多 |
| 額外忽略 | rg --glob '!*.min.js' foo | 在預設規則上再排除一類檔案 |
| 只搜某副檔名 | rg -t py "def main" | -t 與 --type-list 查看內建類型 |
- 適合
- 在 monorepo 或前端專案裡找元件名、環境變數、TODO;CI 日誌裡快速定位報錯檔案。
- 不適合
- 需要修改檔案內容(用編輯器或
sd/sed);跨二進位大檔全文索引(考慮專用工具)。
rg 和 grep 可以完全互換嗎?
不能。rg 面向目錄樹搜尋,預設遞迴並尊重忽略規則;grep 更適合管道和單檔。很多團隊兩者並存。
為什麼搜不到 node_modules 裡的字串?
因為 node_modules 通常在 .gitignore 裡。需要時用 rg --no-ignore 或進入該目錄單獨搜,並預期更慢、結果更多。
Windows 上 rg 找不到命令?
安裝後關閉並重新開啟終端。檢查 where rg。winget/MSI 會把可執行檔放進 PATH;若用手動 zip,需自己把目錄加入使用者環境變數。
搜完程式碼要對齊方案
終端裡定位到檔案後,架構討論仍適合攤在同一張圖上。短會不必新工具棧,見 如何建立空間。