1. はじめに
OpenCode は GitHub でオープンソース公開されている AI エージェントで、ターミナル、IDE、デスクトップでコードを書く手助けをしてくれます。opencode web で起動すれば 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. 入力エリアのキー完全分類
以下では入力エリアのすべてのショートカットキーを、操作の考え方に基づいて7つのカテゴリに分類します。分類を覚える方が個別のキーを丸暗記するより効果的です。
4.1. 第1類:送信とクリア
| キー | 機能 | 説明 |
|---|---|---|
Enter |
メッセージ送信 | |
Shift + Enter |
改行(送信しない) | ⚠️ Windows Terminal では追加設定が必要な場合あり(下記参照) |
Ctrl + Enter |
改行(送信しない) | |
Alt + Enter |
改行(送信しない) | Windows ターミナルでは動作しない場合あり |
Ctrl + J |
改行(送信しない) | 推奨、最も安定 |
Ctrl + C |
行全体をクリア | AI 応答の中止にも使用可、変更推奨 |
複数行のプロンプトを入力中、Shift + Enter ではなく 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 |
左へ1文字 | Backward |
→ / Ctrl + F |
右へ1文字 | Forward |
↑ |
上へ1行 | |
↓ |
下へ1行 | |
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 |
カーソル前の1文字を削除 | 文字 |
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 で入力したすべての内容を記憶しており、上下キーで以前入力したプロンプトをすぐに呼び出せます。
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 |
1ページ上へ |
PageDown / Ctrl + Alt + F |
1ページ下へ |
Ctrl + Alt + Y |
1行ずつ上へ |
Ctrl + Alt + E |
1行ずつ下へ |
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)
✅ 解説記事(日本語)