1. 前言
OpenCode 是一個開源於 GitHub 的 AI 代理,幫助你在終端機、IDE 或桌面端編寫程式碼。它甚至也有網頁模式(只要用 opencode web 啟動即可)。
OpenCode 的 TUI(Text User Interface,文字使用介面)是它最強大的使用方式之一。但很多人打開之後只會打字 + Enter,不知道裡面藏了一套完整的快捷鍵系統。這篇文章會從畫面佈局開始,然後把所有輸入區的按鍵按照「操作思維」分類,讓你用最短的時間上手。
本文快捷鍵資訊基於 OpenCode 官方快捷鍵文件(最後更新:2026年4月24日),並結合個人
tui.json自訂設定。
2. TUI 畫面佈局
OpenCode TUI 的主畫面分成下列幾個主要區域:
-
訊息區:累積了你輸入的提示文字、AI 的思考回應、工具輸出等對話內容
-
輸入區:多行輸入框,支援完整的 Readline/Emacs 風格快捷鍵
-
狀態列:顯示目前 Session 名稱、模型、Agent 模式等資訊
-
Sidebar(可選):右側面板,顯示檔案總管、工具清單等
3. 自訂按鍵
TUI 的設定檔是 tui.json,位於 OpenCode 設定目錄中:
-
Windows:
%USERPROFILE%/.config/opencode/tui.json -
macOS/Linux:
~/.config/opencode/tui.json
你可以透過修改 keybinds 區塊來自訂所有快捷鍵。將某個動作設為 "none" 即可停用該快捷鍵。
3.1. 我的 tui.json 設定
以下按鍵已被我修改過,預設按鍵可查看 官方快捷鍵文件
{
"$schema": "https://opencode.ai/tui.json",
"theme": "catppuccin",
"keybinds": {
"leader": "ctrl+x",
"app_exit": "ctrl+c,<leader>q",
"editor_open": "<leader>e",
"theme_list": "<leader>t",
"sidebar_toggle": "<leader>b",
"scrollbar_toggle": "none",
"username_toggle": "none",
"status_view": "<leader>s",
"tool_details": "none",
"session_export": "<leader>x",
"session_new": "<leader>n",
"session_list": "<leader>l",
"session_timeline": "<leader>g",
"session_fork": "none",
"session_rename": "none",
"session_share": "none",
"session_unshare": "none",
"session_interrupt": "escape",
"session_compact": "<leader>c",
"session_child_first": "<leader>down",
"session_child_cycle": "<leader>right",
"session_child_cycle_reverse": "<leader>left",
"session_parent": "<leader>up",
"messages_page_up": "pageup,ctrl+alt+b",
"messages_page_down": "pagedown,ctrl+alt+f",
"messages_line_up": "up",
"messages_line_down": "down",
"messages_half_page_up": "alt+pageup",
"messages_half_page_down": "alt+pgdown",
"messages_first": "ctrl+home",
"messages_last": "ctrl+end",
"messages_next": "alt+down",
"messages_previous": "alt+up",
"messages_copy": "<leader>y",
"messages_undo": "<leader>u",
"messages_redo": "<leader>r",
"messages_last_user": "none",
"messages_toggle_conceal": "<leader>h",
"model_list": "<leader>m",
"model_cycle_recent": "f2",
"model_cycle_recent_reverse": "shift+f2",
"model_cycle_favorite": "none",
"model_cycle_favorite_reverse": "none",
"variant_cycle": "ctrl+t",
"variant_list": "none",
"command_list": "ctrl+p",
"agent_list": "<leader>a",
"agent_cycle": "tab",
"agent_cycle_reverse": "shift+tab",
"input_clear": "ctrl+c",
"input_paste": "ctrl+v",
"input_submit": "return",
"input_newline": "ctrl+return,shift+return,ctrl+j",
"input_move_left": "left,ctrl+b",
"input_move_right": "right,ctrl+f",
"input_move_up": "ctrl+1",
"input_move_down": "ctrl+2",
"input_select_left": "shift+left",
"input_select_right": "shift+right",
"input_select_up": "shift+up",
"input_select_down": "shift+down",
"input_line_home": "ctrl+a",
"input_line_end": "ctrl+e",
"input_select_line_home": "ctrl+shift+a",
"input_select_line_end": "ctrl+shift+e",
"input_visual_line_home": "alt+a",
"input_visual_line_end": "alt+e",
"input_select_visual_line_home": "alt+shift+a",
"input_select_visual_line_end": "alt+shift+e",
"input_buffer_home": "home",
"input_buffer_end": "end",
"input_select_buffer_home": "shift+home",
"input_select_buffer_end": "shift+end",
"input_delete_line": "ctrl+y",
"input_delete_to_line_end": "ctrl+k",
"input_delete_to_line_start": "ctrl+u",
"input_backspace": "backspace,shift+backspace",
"input_delete": "delete,shift+delete",
"input_undo": "ctrl+z",
"input_redo": "ctrl+.,super+shift+z",
"input_word_forward": "alt+f,alt+right,ctrl+right",
"input_word_backward": "alt+b,alt+left,ctrl+left",
"input_select_word_forward": "alt+shift+f,alt+shift+right",
"input_select_word_backward": "alt+shift+b,alt+shift+left",
"input_delete_word_forward": "alt+d,alt+delete,ctrl+delete",
"input_delete_word_backward": "ctrl+w,ctrl+backspace,alt+backspace",
"history_previous": "ctrl+up",
"history_next": "ctrl+down",
"terminal_suspend": "",
"terminal_title_toggle": "none",
"tips_toggle": "<leader>h",
"display_thinking": "none"
},
"scroll_speed": 3,
"scroll_acceleration": {
"enabled": true
},
"diff_style": "auto",
"mouse": true,
"plugin": [],
"plugin_enabled": {}
}
3.2. Leader Key(前導鍵)
OpenCode 的大多數快捷鍵使用 Leader(前導鍵),預設為
Ctrl+X。這可以避免與終端機中的其他快捷鍵衝突。操作方式是:先按前導鍵,再按對應的快捷鍵。例如新建 Session:先按Ctrl+X,放開後再按N。
| 組合鍵 | 功能 | 對應斜線命令 |
| ------------ | ------------- | --------------------------------- |
| <leader> B | 切換 Sidebar 顯示 | |
| <leader> E | 開啟編輯器 | /editor |
| <leader> M | 模型列表 | /models |
| <leader> S | 狀態檢視 | /status |
| <leader> T | 主題切換 | /themes |
| <leader> N | 新增 Session | /new 或 /clear |
| <leader> L | Session 列表 | /sessions |
| <leader> G | Session 時間線 | /timeline |
| <leader> X | 匯出 Session | /export |
| <leader> C | 壓縮對話上下文 | /compact |
| <leader> A | Agent 列表 | /agents |
| <leader> H | 顯示/隱藏提示 | |
| <leader> Q | 離開應用程式 | /exit 或 /quit 或 :q 或 quit |
| <leader> U | 訊息區 Undo | /undo |
| <leader> R | 訊息區 Redo | |
| <leader> Y | 複製訊息 | /copy |
3.3. 模式切換
-
Tab/Shift + Tab:在 Build 模式(執行程式)和 Plan 模式(規劃架構)之間切換 -
F2/Shift + F2:循環切換最近使用的模型 -
Ctrl + P:開啟命令面板 -
Ctrl + T:循環切換模型變體(variant),low、medium、high等切換
4. 輸入區按鍵完整分類
以下將輸入區所有快捷鍵,依操作思維分為七大類。記住分類遠比死背個別按鍵有效。
4.1. 第 1 類:提交與清除
| 按鍵 | 功能 | 說明 |
| --------------- | ------- | --------------------------------- |
| Enter | 送出訊息 | |
| Shift + Enter | 換行(不送出) | ⚠️ Windows Terminal 可能需要額外設定(見下方) |
| Ctrl + Enter | 換行(不送出) | |
| Alt + Enter | 換行(不送出) | Windows 終端機可能無效 |
| Ctrl + J | 換行(不送出) | 推薦使用,最穩定 |
| Ctrl + C | 清除整行 | 也可中止 AI 回應,建議修改 |
在輸入多行 prompt 時,不小心按到
Enter而非Shift + Enter,導致訊息還沒寫完就送出去了。養成習慣:換行用Shift + Enter或Ctrl + J。
某些終端機預設不會發送帶修飾鍵的 Enter 鍵。如果你發現
Shift + Enter沒反應,需要在 Windows Terminal 的settings.json中設定:
在
actions陣列中加入:
{
"command": { "action": "sendInput", "input": "\u001b[13;2u" },
"id": "User.sendInput.ShiftEnterCustom"
}
在
keybindings陣列中加入:
{ "keys": "shift+enter", "id": "User.sendInput.ShiftEnterCustom" }
儲存後重新啟動 Windows Terminal 即可。
4.2. 第 2 類:游標移動
OpenCode 輸入區完整支援 Bash/Readline 風格的快捷鍵,熟悉終端機的人可以無縫上手。
| 按鍵 | 動作 | 記憶口訣 |
| ---------------- | -------- | --------------- |
| ← / Ctrl + B | 向左一字元 | Backward |
| → / Ctrl + F | 向右一字元 | Forward |
| ↑ | 向上一行 | |
| ↓ | 向下一行 | |
| Ctrl + A | 移到行首 | A = 頭 |
| Ctrl + E | 移到行尾 | E = End |
| Home | 移到緩衝區最前面 | |
| End | 移到緩衝區最後面 | |
| Alt + A | 移到視覺行首 | visual line |
| Alt + E | 移到視覺行尾 | visual line |
核心記憶法:
Ctrl + A/E是行首/行尾(最常用),Home/End是整個輸入區的最前/最後。輸入區有多行內容時,這幾個按鍵才能看出差異。
4.3. 第 3 類:文字選取
規則只有一條:任何移動鍵 + Shift = 選取。
| 移動鍵 | + Shift 變成選取 |
| ------ | ---------------- |
| ← / → | Shift + ← / Shift + → 選取字元 |
| ↑ / ↓ | Shift + ↑ / Shift + ↓ 選取行 |
| Ctrl + A | Ctrl + Shift + A 選取到行首 |
| Ctrl + E | Ctrl + Shift + E 選取到行尾 |
| Home / End | Shift + Home / Shift + End 選取到緩衝區首尾 |
| Alt + A / Alt + E | Alt + Shift + A / Alt + Shift + E 選取到視覺行首尾 |
| Alt + ← / Alt + → | Alt + Shift + ← / Alt + Shift + → 選取一個單字 |
4.4. 第 4 類:刪除操作
刪除操作是 OpenCode 輸入區最強大的部分,支援多種粒度的刪除。
| 按鍵 | 功能 | 等級 |
| --------------------------------------------------- | --------- | --- |
| Backspace | 刪除游標前一字元 | 字元 |
| Ctrl + D / Delete | 刪除游標所在字元 | 字元 |
| Ctrl + W / Ctrl + Backspace / Alt + Backspace | 刪除前一個英文單字 | 單字 |
| Alt + D / Alt + Delete / Ctrl + Delete | 刪除後一個英文單字 | 單字 |
| Ctrl + K | 刪除游標到行尾 | 行 |
| Ctrl + U | 刪除游標到行首 | 行 |
| Ctrl+Shift+D | 刪除整行 | 行 |
4.5. 第 5 類:字詞跳躍
英文環境下特別好用,以「單字」為單位跳躍游標。
| 按鍵 | 功能 |
| ---------------------------------- | ------ |
| Alt + F / Alt + → / Ctrl + → | 向前一個單字 |
| Alt + B / Alt + ← / Ctrl + ← | 向後一個單字 |
選取版(加上 Shift):
| 按鍵 | 功能 |
| ---- | ---- |
| Alt + Shift + F / Alt + Shift + → | 選取到下一個單字 |
| Alt + Shift + B / Alt + Shift + ← | 選取到上一個單字 |
4.6. 第 6 類:歷史記錄
| 按鍵 | 功能 |
| --- | --------- |
| ↑ | 上一筆輸入過的內容 |
| ↓ | 下一筆輸入過的內容 |
OpenCode 會記住你在當前 session 中的所有輸入,用上下鍵就能快速找回之前打過的 prompt。
4.7. 第 7 類:復原、重做、貼上與其他編輯
| 按鍵 | 功能 |
| ------------------------------------- | ------------------- |
| Ctrl + - / Ctrl + Z / Super + Z | 復原(undo) |
| Ctrl + . / Super + Shift + Z | 重做(redo) |
| Ctrl + V | 貼上 |
| Ctrl + T | 交換游標前後字元(transpose) |
| Ctrl + G | 取消彈出視窗 / 中止正在執行的回應 |
OpenCode 桌面應用程式的提示詞輸入框支援常見的 Readline/Emacs 風格文字編輯快捷鍵。這些快捷鍵為內建功能,目前無法透過
opencode.json進行設定。
5. 訊息檢視區快捷鍵
除了輸入區,訊息檢視區也有實用的快捷鍵:
| 按鍵 | 功能 |
| ----------------------------- | --------- |
| PageUp / Ctrl + Alt + B | 整頁上翻 |
| PageDown / Ctrl + Alt + F | 整頁下翻 |
| Ctrl + Alt + Y | 逐行向上 |
| Ctrl + Alt + E | 逐行向下 |
| Ctrl + Alt + U | 半頁向上 |
| Ctrl + Alt + D | 半頁向下 |
| Ctrl + G / Home | 跳到第一則訊息 |
| Ctrl + Alt + G / End | 跳到最後一則訊息 |
| <leader> Y | 複製訊息 |
| <leader> U | 訊息區 Undo |
| <leader> R | 訊息區 Redo |
| <leader> H | 切換隱藏/顯示內容 |
6. Session 導航
OpenCode 支援巢狀 Session(子對話),可以來回切換:
| 按鍵 | 功能 |
| ---- | ---- |
| <leader> Down | 進入第一個子 Session |
| <leader> Right | 循環到下一個子 Session |
| <leader> Left | 循環到上一個子 Session |
| <leader> Up | 回到父 Session |
| Escape | 中斷目前 Session |
| <leader> N | 新增 Session |
| <leader> L | Session 列表 |
| <leader> G | Session 時間線 |
| <leader> X | 匯出 Session |
| <leader> C | 壓縮對話上下文 |
7. 結語
OpenCode TUI 的快捷鍵設計源自 Bash/Readline,加上自己的 Leader Key 系統。與其死背整張表,不如理解分類邏輯——移動、選取、刪除、送出——把常用鍵融入日常操作,剩下的隨用隨查就好。
8. 附錄:完整快捷鍵速查表
| 類別 | 按鍵 | 功能 |
| ----------- | ---------------------------- | ----------- |
| 提交 | Enter | 送出訊息 |
| | Shift + Enter / Ctrl + J | 換行 |
| | Ctrl + C | 清除輸入 / 中止回應 |
| 移動 | Ctrl + A | 行首 |
| | Ctrl + E | 行尾 |
| | Alt + B / Alt + F | 前/後一個單字 |
| | Home / End | 緩衝區首/尾 |
| 選取 | Shift + ←/→/↑/↓ | 選取字元/行 |
| | Ctrl + Shift + A/E | 選取到行首/尾 |
| | Alt + Shift + ←/→ | 選取單字 |
| 刪除 | Ctrl + K | 刪到行尾 |
| | Ctrl + U | 刪到行首 |
| | Ctrl + Shift + D | 刪除整行 |
| | Ctrl + W | 刪前一個單字 |
| | Alt + D | 刪後一個單字 |
| 歷史 | ↑ / ↓ | 上/下一筆輸入 |
| 復原 | Ctrl + - / Ctrl + Z | 復原 |
| | Ctrl + . | 重做 |
| 貼上 | Ctrl + V | 貼上 |
| 其他 | Ctrl + T | 交換字元 |
| | Ctrl + G | 中止回應 |
| 模型 | <leader> M | 模型列表 |
| | F2 | 切換模型 |
| | Ctrl + T | 切換 variant |
| Session | <leader> N | 新增 |
| | <leader> C | 壓縮上下文 |
| | Escape | 中斷 |
| 介面 | <leader> B | 側邊欄 |
| | Ctrl + P | 命令面板 |
| | Tab | 切換 Agent |
💡 相關鏈接
✅ Explanation article(English)
9. 教學影片
##