1. はじめに

OpenCode は GitHub でオープンソース公開されている AI エージェントで、ターミナル、IDE、デスクトップでコードを書く手助けをしてくれます。opencode web で起動すれば Web モードも使えます。

OpenCode の TUI(Text User Interface、テキストユーザーインターフェース)は最も強力な使い方の一つです。しかし多くの人は起動後、文字入力 + Enter しか使わず、中に隠された完全なショートカットキーシステムを知りません。この記事では画面レイアウトから始め、入力エリアのすべてのキーを「操作の考え方」で分類し、最短時間で使いこなせるようにします。

本記事の根拠

本記事のショートカットキー情報は OpenCode 公式ショートカットキードキュメント(最終更新:2026年4月24日)に基づき、個人の tui.json カスタム設定と組み合わせています。

2. TUI 画面レイアウト

OpenCode TUI のメイン画面は以下の主要エリアに分かれています:

gh|700

  • メッセージエリア:入力したプロンプト、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 を使う。

Windows Terminal の Shift+Enter 設定

一部のターミナルはデフォルトで修飾キー付きの 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)
解説記事(日本語)

9. チュートリアル動画

https://youtu.be/8mgj7IxtkDg