20 快捷鍵速查表
20.1 Shell 快捷鍵
20.1.1 移動
背景(問題發現):在 Shell 中編輯長命令時,使用方向鍵逐字移動效率低下。特別是需要修改命令開頭或快速跳到特定位置時,傳統方式浪費時間。
方法:使用 Emacs 風格的快捷鍵進行游標移動。這些快捷鍵源自 Readline 函式庫,被大多數 Shell(bash, zsh)採用,提供快速且精確的游標控制。
核心概念: - Ctrl 系列:字元級移動 - Alt 系列:單詞級移動 - 組合使用可達到任意位置
| 快捷鍵 | 功能 |
|---|---|
Ctrl+A |
移到行首 |
Ctrl+E |
移到行尾 |
Ctrl+B |
向左移動一個字元 |
Ctrl+F |
向右移動一個字元 |
Alt+B |
向左移動一個單詞 |
Alt+F |
向右移動一個單詞 |
實際範例:
討論/延伸: - 這些快捷鍵在許多地方通用:bash, zsh, fish, Python REPL, MySQL CLI - Mac 用戶注意:部分終端機 Alt 需設定為 Meta 鍵才能使用 - Vim 用戶可考慮啟用 set -o vi 模式使用 Vim 風格移動
20.1.2 編輯
背景(問題發現):輸入錯誤的長命令時,按住 Backspace 逐字刪除非常低效。需要快速刪除大段文字並重新輸入的場景很常見。
方法:使用 Kill 和 Yank 機制。Shell 提供 “kill ring” 概念,刪除的內容會暫存,可以重複貼上。這類似簡化版的剪貼簿系統。
核心概念: - Kill:刪除並暫存到 kill ring - Yank:從 kill ring 取出並貼上 - 方向性刪除:往前(U)、往後(K)、單詞(W)
| 快捷鍵 | 功能 |
|---|---|
Ctrl+U |
刪除到行首 |
Ctrl+K |
刪除到行尾 |
Ctrl+W |
刪除前一個單詞 |
Ctrl+Y |
貼上刪除的內容 |
Ctrl+L |
清除螢幕 |
實際範例:
# 場景 1:快速刪除密碼輸入錯誤
$ mysql -u root -p wrong_password_here
# Ctrl+U 快速清除整行重新輸入
# 場景 2:移動參數位置
$ rsync -avz /source/path /wrong/destination
# ↑ 游標在這
# Ctrl+W 刪除 "/wrong/destination"
# 輸入正確路徑
# Ctrl+Y 貼回剛刪除的路徑(用於其他地方)
# 場景 3:清理終端畫面
$ cat large_file.log
# ...一堆輸出...
# Ctrl+L 清除螢幕(比 clear 命令更快)
# 場景 4:Kill ring 的重複利用
$ echo "這是一段需要重複使用的路徑"
# Ctrl+U 刪除整行
$ export PATH=$PATH:/opt/bin
# Ctrl+Y 貼上剛才的內容討論/延伸: - Ctrl+U vs Ctrl+W:前者刪整行,後者刪單詞,依情況選擇 - Kill ring 是單層的,新刪除會覆蓋舊內容 - Ctrl+L 優於 clear:不會新增歷史記錄,單鍵操作更快 - tmux 用戶可用 prefix + Ctrl+L 清除 pane 歷史
20.1.3 歷史
背景(問題發現):重複輸入相同或相似的長命令效率極低。Shell 歷史記錄了所有命令,但手動翻找或記憶命令序號很困難。
方法:使用歷史搜尋和擴展機制。Shell 提供增量搜尋(Ctrl+R)和歷史擴展語法(!),可以快速定位和重用之前的命令。
核心概念: - 增量搜尋:邊輸入邊過濾歷史 - 歷史擴展:使用 ! 符號引用歷史命令或參數 - 命令重用:避免重複輸入
| 快捷鍵 | 功能 |
|---|---|
Ctrl+R |
搜尋歷史命令 |
Ctrl+P |
上一個命令 |
Ctrl+N |
下一個命令 |
!! |
執行上一個命令 |
!$ |
上一個命令的最後一個參數 |
實際範例:
# 場景 1:Ctrl+R 增量搜尋
# 按 Ctrl+R,輸入 "docker"
(reverse-i-search)`docker': docker ps -a
# 繼續輸入 "run"
(reverse-i-search)`docker run': docker run -it ubuntu bash
# 按 Enter 執行,或按方向鍵編輯
# 場景 2:使用 !! 快速重試
$ apt update
Permission denied
$ sudo !! # 等同於 sudo apt update
# 場景 3:使用 !$ 重用參數
$ mkdir -p /very/long/path/to/project
$ cd !$ # 等同於 cd /very/long/path/to/project
# 場景 4:組合使用歷史擴展
$ cat /etc/nginx/sites-available/default
$ vim !$ # 編輯剛才查看的檔案
$ sudo systemctl restart nginx
$ sudo !! # 重複上一個 sudo 命令(如果需要)
# 場景 5:多次使用 !$
$ touch important-file.txt
$ git add !$
$ git commit -m "Add !$" # 這裡 !$ 會擴展為 important-file.txt討論/延伸: - Ctrl+R 可重複按以循環搜尋結果 - 結合 fzf 可獲得更強大的歷史搜尋(視覺化介面) - 其他有用的歷史擴展: - !n:執行歷史中第 n 個命令 - !-n:執行倒數第 n 個命令 - !string:執行最近以 string 開頭的命令 - zsh 用戶可啟用 setopt HIST_VERIFY 讓歷史擴展顯示後再執行
20.2 Tmux 快捷鍵
假設 prefix 設為
Ctrl+A
Tmux 是一個終端多路器,提供會話管理、視窗分割等功能。
20.2.1 Session
背景(問題發現):SSH 連線中斷會導致所有執行中的程式終止。長時間運行的任務(編譯、訓練模型、下載)需要持續的終端連線,這限制了工作靈活性。
方法:使用 tmux session 管理。Session 可以 detach(脫離)後在背景運行,之後重新 attach(附加)。這實現了終端環境的持久化。
核心概念: - Session:獨立的 tmux 工作環境 - Detach:脫離 session 但保持運行 - Attach:重新連接到 session - 多 session:不同專案使用不同 session
| 快捷鍵 | 功能 |
|---|---|
prefix d |
Detach session |
prefix s |
列出 sessions |
prefix $ |
重新命名 session |
實際範例:
# 場景 1:建立專案 session
$ tmux new -s backend-dev
# 在 session 中工作...
# prefix d 離開(程式繼續運行)
# 稍後回來
$ tmux attach -t backend-dev
# 場景 2:管理多個專案
$ tmux new -s project-a
# prefix d
$ tmux new -s project-b
# prefix d
$ tmux ls # 列出所有 sessions
project-a: 1 windows (created Sat Dec 19 10:30:00 2025)
project-b: 1 windows (created Sat Dec 19 10:35:00 2025)
# 使用 prefix s 視覺化選擇 session
# 場景 3:重新命名 session
# 在 session 中按 prefix $
# 輸入新名稱,例如 "frontend-react"
# 或從外部重命名
$ tmux rename-session -t old-name new-name
# 場景 4:遠端工作流程
$ ssh user@server
$ tmux new -s remote-work
$ npm run build # 長時間編譯
# 關閉 SSH 視窗(編譯繼續)
# 稍後重新 SSH 連線
$ tmux attach -t remote-work # 查看編譯結果討論/延伸: - Session 名稱建議使用專案或任務相關的有意義名稱 - 可使用 tmux kill-session -t name 終止 session - tmux-resurrect 插件可保存 session 狀態,重開機後恢復 - 結合 SSH 使用時,建議在 ~/.ssh/config 設定 KeepAlive
20.2.2 Window
背景(問題發現):在單一終端視窗中切換不同任務(編輯器、測試、日誌監控)效率低下。使用多個終端視窗會導致桌面混亂,難以管理。
方法:使用 tmux window(類似瀏覽器分頁)。每個 window 是獨立的工作空間,可快速切換,保持桌面整潔。
核心概念: - Window:類似瀏覽器的分頁 - 數字索引:window 編號從 0 開始 - 快速切換:使用數字鍵或序列鍵 - 命名管理:給 window 有意義的名稱
| 快捷鍵 | 功能 |
|---|---|
prefix c |
新增 window |
prefix n |
下一個 window |
prefix p |
上一個 window |
prefix , |
重新命名 window |
prefix [0-9] |
切換到指定 window |
實際範例:
# 場景 1:標準開發工作流程
# Window 0: Editor
$ tmux new -s dev -n editor
$ nvim .
# Window 1: Tests (prefix c 建立新 window)
# prefix c
$ npm test -- --watch
# Window 2: Server (prefix c)
$ npm run dev
# Window 3: Logs (prefix c)
$ tail -f /var/log/app.log
# 快速切換
# prefix 1 → 查看測試
# prefix 2 → 檢查伺服器
# prefix 0 → 回到編輯器
# 場景 2:重新命名 window 提高可讀性
# prefix , 然後輸入 "editor"
# prefix , 然後輸入 "tests"
# prefix , 然後輸入 "server"
# Window 列表顯示:
# 0:editor* 1:tests 2:server 3:logs
# 場景 3:快速導航技巧
# prefix n (next) 循環下一個
# prefix p (previous) 循環上一個
# prefix 2 直接跳到 window 2
# 場景 4:關閉 window
# 在 window 中執行 exit 或 Ctrl+D
# 或使用 prefix & 確認後關閉討論/延伸: - 建議為每個 window 設定有意義的名稱,便於識別 - 可在 .tmux.conf 設定 window 從 1 開始編號(更符合鍵盤佈局) - 使用 prefix w 可視覺化列出所有 window 和 pane - tmux-powerline 等插件可美化 window 狀態列顯示
20.2.3 Pane
背景(問題發現):同時查看多個相關任務(程式碼+輸出、編輯器+文件、多個日誌)需要頻繁切換視窗。螢幕空間沒有被充分利用。
方法:使用 tmux pane 分割視窗。Pane 允許在同一個 window 中顯示多個終端,類似 IDE 的分割視窗功能。
核心概念: - 水平分割(horizontal):上下分割 - 垂直分割(vertical):左右分割 - Vim 風格導航:h/j/k/l 切換 - 動態調整:可調整 pane 大小 - 暫時最大化:z 快速放大/縮小
| 快捷鍵 | 功能 |
|---|---|
prefix b |
水平分割 |
prefix v |
垂直分割 |
prefix h/j/k/l |
切換 pane |
prefix H/J/K/L |
調整大小 |
prefix z |
最大化/還原 pane |
prefix x |
關閉 pane |
實際範例:
# 場景 1:經典左右佈局(編輯器+輸出)
$ tmux
$ nvim app.py
# prefix v (垂直分割)
$ python app.py # 右側執行程式
# 場景 2:三欄佈局(編輯+測試+日誌)
$ nvim
# prefix v (第一次垂直分割)
$ npm test
# prefix h (切換到右側 pane)
# prefix b (水平分割右側)
$ tail -f app.log
# 最終佈局:
# ┌──────────┬──────────┐
# │ │ tests │
# │ editor ├──────────┤
# │ │ logs │
# └──────────┴──────────┘
# 場景 3:Vim 風格導航
# prefix h - 移到左側 pane
# prefix j - 移到下方 pane
# prefix k - 移到上方 pane
# prefix l - 移到右側 pane
# 場景 4:調整 pane 大小
# prefix H - 向左擴大
# prefix J - 向下擴大
# prefix K - 向上擴大
# prefix L - 向右擴大
# (按住不放連續調整)
# 場景 5:暫時最大化
# 在小 pane 中查看詳細輸出
# prefix z (最大化當前 pane)
# 查看完畢
# prefix z (還原)
# 場景 6:快速重組佈局
# prefix Space 循環切換預設佈局
# prefix Alt+1 垂直均分
# prefix Alt+2 水平均分討論/延伸: - 分割方向記憶技巧:b (below) 下方分割,v (vertical) 垂直(左右)分割 - 建議設定滑鼠支援:set -g mouse on 可用滑鼠調整大小 - 使用 prefix q 顯示 pane 編號,然後按數字快速切換 - 進階佈局可使用 tmux-pain-control 插件獲得更多快捷鍵 - 搭配 vim-tmux-navigator 插件可在 Vim 和 tmux pane 之間無縫切換
20.2.4 複製模式
背景(問題發現):需要從終端輸出中複製文字時,使用滑鼠選取在 tmux 中會選到行號和格式字元。無法像 Vim 一樣精確控制選取範圍。
方法:使用 tmux 複製模式(copy mode)。這是一個類 Vim 的瀏覽和選取模式,可以使用鍵盤精確選取和複製文字。
核心概念: - 複製模式:類似 Vim 的 normal mode - Vim 風格操作:使用 hjkl、搜尋等 - 選取和複製:v 開始選取,y 複製 - 系統剪貼簿整合:可與系統剪貼簿互通
| 快捷鍵 | 功能 |
|---|---|
prefix [ |
進入複製模式 |
v |
開始選取 |
y |
複製選取 |
prefix ] |
貼上 |
實際範例:
# 場景 1:複製命令輸出
$ curl https://api.example.com/data
{
"result": "success",
"token": "abc123def456"
}
# 需要複製 token 值
# prefix [ (進入複製模式)
# /token (搜尋 "token")
# w (移到 "abc123def456")
# v (開始選取)
# e (選到單詞結尾)
# y (複製)
# prefix ] (貼上到當前 pane)
# 場景 2:複製多行日誌
# prefix [ (進入複製模式)
# gg (跳到開頭)
# /ERROR (搜尋錯誤)
# V (行選取模式)
# 5j (選取 5 行)
# y (複製)
# 場景 3:向上捲動查看歷史輸出
$ npm run build
# ...大量輸出...
# prefix [ (進入複製模式)
# Ctrl+u (向上翻半頁)
# Ctrl+d (向下翻半頁)
# gg (跳到最開頭)
# G (跳到最末尾)
# q (退出複製模式)
# 場景 4:搜尋並複製
# prefix [
# ?pattern (向上搜尋)
# n (下一個結果)
# N (上一個結果)
# v (選取)
# y (複製)
# 場景 5:整合系統剪貼簿(需配置)
# 在 .tmux.conf 中設定:
# bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'pbcopy' # macOS
# bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'xclip -in -selection clipboard' # Linux
# 複製後可直接 Cmd+V 到其他應用程式討論/延伸: - 預設使用 Emacs 風格按鍵,可改為 Vim 風格:setw -g mode-keys vi - 滑鼠支援(set -g mouse on)後可用滑鼠選取自動進入複製模式 - 進階選取: - V (大寫):行選取模式 - Ctrl+v:區塊選取模式(需 vim 風格) - 搜尋支援正規表示式,非常強大 - 可用 prefix = 查看複製歷史(需啟用 buffer)
20.3 Neovim 快捷鍵
假設 leader 設為
Space
Neovim 是 Vim 的現代分支,提供可擴展的編輯功能。
20.3.1 基本移動
背景(問題發現):使用方向鍵或滑鼠移動游標需要手離開主鍵盤區,降低編輯效率。大型檔案中跳轉到特定位置很慢。
方法:使用 Vim 的移動系統。核心是 hjkl 主鍵區移動,配合單詞、行、頁面級別的快速跳轉,形成高效的導航體系。
核心概念: - hjkl:基礎方向移動(右手主鍵區) - 單詞級:w/b 快速跳過單詞 - 行級:0/$ 快速到行頭尾 - 檔案級:gg/G 快速到檔案頭尾 - 畫面級:Ctrl+d/u 翻頁導航
| 快捷鍵 | 功能 |
|---|---|
h/j/k/l |
左/下/上/右 |
w/b |
下/上一個單詞 |
0/$ |
行首/行尾 |
gg/G |
檔案開頭/結尾 |
Ctrl+d/u |
向下/上半頁 |
實際範例:
" 場景 1:快速移動到函式定義
" 從檔案開頭找到第 50 行的函式
gg " 跳到檔案開頭
50G " 跳到第 50 行
w " 跳到函式名
w " 跳到參數
" 場景 2:編輯長行
" 游標在行中間,需要修改行尾
$ " 跳到行尾
b " 回退一個單詞
ciw " 修改當前單詞
" 場景 3:瀏覽大型檔案
Ctrl+d " 向下翻半頁
Ctrl+d " 繼續向下
Ctrl+u " 向上翻半頁回去
" 場景 4:組合移動(數字+移動)
5j " 向下移動 5 行
3w " 向前移動 3 個單詞
2Ctrl+d " 向下翻 1 頁(2 個半頁)
" 場景 5:精確定位
:123 " 跳到第 123 行
/function " 搜尋 "function"
n " 下一個搜尋結果
`` " 跳回之前的位置
" 場景 6:行內移動
f( " 跳到下一個 ( 字元
; " 重複上次 f 動作
, " 反向重複
t) " 跳到 ) 之前討論/延伸: - hjkl 源自 Vi 時代的 ADM-3A 終端機鍵盤設計 - 進階移動: - ^:跳到行首第一個非空白字元 - %:跳到配對的括號 - {/}:上/下一個段落 - H/M/L:螢幕最上/中/下 - 相對行號(:set relativenumber)配合數字移動超強 - 插件推薦:vim-easymotion 可視覺化快速跳轉
20.3.2 編輯
背景(問題發現):傳統編輯器需要用滑鼠選取文字才能操作,頻繁切換插入/選取模式效率低。快速重複編輯動作(刪除、複製、貼上)很困難。
方法:使用 Vim 的模式編輯系統。Normal mode 用於導航和操作,Insert mode 用於輸入。配合動詞+名詞的編輯語法,形成強大的編輯語言。
核心概念: - 進入插入模式:i/a/o/O 不同位置插入 - 文字操作:d(刪除)/y(複製)/p(貼上) - 整行操作:雙按動詞鍵(dd/yy) - 復原系統:u(undo)/Ctrl+r(redo) - 可重複性:. 重複上次操作
| 快捷鍵 | 功能 |
|---|---|
i/a |
在游標前/後插入 |
o/O |
在下/上方新增行 |
dd |
刪除行 |
yy |
複製行 |
p/P |
在後/前貼上 |
u |
復原 |
Ctrl+r |
重做 |
實際範例:
" 場景 1:快速進入插入模式的不同方式
i " 在游標前插入
a " 在游標後插入(append)
I " 在行首插入
A " 在行尾插入
o " 在下方新增空行並插入
O " 在上方新增空行並插入
" 場景 2:組合編輯命令(動詞+名詞)
diw " delete inner word - 刪除游標所在單詞
ci" " change inner " - 修改雙引號內容
yap " yank a paragraph - 複製整個段落
dgg " delete to top - 刪除到檔案開頭
y$ " yank to end - 複製到行尾
" 場景 3:整行操作
dd " 刪除當前行
3dd " 刪除 3 行
yy " 複製當前行
5yy " 複製 5 行
p " 在下方貼上
P " 在上方貼上
" 場景 4:重複操作的威力
cw new<Esc> " 修改單詞為 "new"
. " 在下一個位置重複修改
. " 再次重複
" 場景 5:復原和重做
u " 復原上一個操作
u u u " 連續復原 3 次
Ctrl+r " 重做(反復原)
U " 復原整行的所有修改
" 場景 6:實戰範例 - 重構變數名
" 將所有 oldName 改為 newName
/oldName " 搜尋第一個
cw newName<Esc> " 修改
n . " 下一個並重複
n . " 繼續
" 場景 7:視覺模式選取
v " 字元選取模式
V " 行選取模式
Ctrl+v " 區塊選取模式
# 選取後可以 d(刪除) y(複製) c(修改)討論/延伸: - Vim 的編輯語言:動詞(d/c/y)+ 數量 + 名詞(w/$/iw/ap) - 進階操作符: - >>/<<:縮排/反縮排 - gU/gu:轉大寫/小寫 - =:自動縮排 - 暫存器系統: - "ayy:複製到暫存器 a - "ap:從暫存器 a 貼上 - "+y:複製到系統剪貼簿 - 宏錄製:qa 開始錄製到 a,q 停止,@a 執行
20.3.3 搜尋
| 快捷鍵 | 功能 |
|---|---|
/pattern |
向下搜尋 |
?pattern |
向上搜尋 |
n/N |
下/上一個結果 |
*/# |
搜尋游標下的單詞 |
20.3.4 Telescope (fzf 整合)
| 快捷鍵 | 功能 |
|---|---|
<leader>ff |
搜尋檔案 |
<leader>fg |
搜尋文字 |
<leader>fb |
搜尋 buffer |
<leader>fh |
搜尋說明 |
20.3.5 LSP
| 快捷鍵 | 功能 |
|---|---|
gd |
跳到定義 |
gr |
查看參考 |
K |
顯示文件 |
<leader>ca |
Code action |
<leader>rn |
重新命名 |
20.4 fzf 快捷鍵
fzf 是一個強大的模糊搜尋工具,提供互動式的命令列搜尋體驗。
20.4.1 Shell 整合
| 快捷鍵 | 功能 |
|---|---|
Ctrl+T |
搜尋檔案 |
Ctrl+R |
搜尋歷史 |
Alt+C |
搜尋目錄並 cd |
20.4.2 fzf 內部
| 快捷鍵 | 功能 |
|---|---|
Ctrl+J/K |
上下移動 |
Tab |
多選 |
Enter |
確認選擇 |
Ctrl+C |
取消 |
? |
切換預覽 |
不要一次記住所有快捷鍵。先掌握最常用的,其他的用到再學。