OpenCode ショートカットキー設定の詳細

OpenCode は、アプリケーション制御、セッション管理、メッセージ閲覧、モデル切り替え、入力編集などの各種操作を網羅した、完全なキーボードショートカットシステムを提供します。

すべてのショートカットキーは、tui.jsonファイルでカスタマイズできます。


設定ファイル

ショートカットキー設定は、tui.jsonファイルのkeybindsフィールドに記述します。各レコードのキー名は操作名、値は対応するショートカットキーです:

例

{
  "$schema": "https://opencode.ai/tui.json",
  "keybinds": {
"leader": "ctrl+x", // リーダーキー設定(下記参照)
"session_new": "<leader>n", // 新規セッション:リーダーキーを押してから n を押す
"model_list": "<leader>m", // モデルリストを開く:リーダーキーを押してから m を押す
"session_compact": "none" // 値を "none" に設定するとこのショートカットキーを無効化できます
  }
}

1つの操作に複数のショートカットキーをバインドでき、カンマで区切ります。いずれかを押すと操作が実行されます:

例

{
  "$schema": "https://opencode.ai/tui.json",
  "keybinds": {
// 以下の記述は、pageup または ctrl+alt+b を押すと、どちらでも上にページ送りできることを示します。
    "messages_page_up": "pageup,ctrl+alt+b"
  }
}

リーダーキー(Leader Key)

OpenCode のほとんどのショートカットキーはリーダーキー(Leader Key)メカニズムを採用しています。まずリーダーキーを押し、次に機能キーを押すと、2つのキーの組み合わせで対応する操作が実行されます。この設計の利点は、ターミナル自体のショートカットキーとの競合を避けられることです。

デフォルトのリーダーキーはctrl+xです。例えば、新規セッションのショートカットキーは<leader>n、実際の操作は:まずctrl+x、次にn。

リーダーキーは任意のコンビネーションキーに変更できます:

例

{
  "$schema": "https://opencode.ai/tui.json",
  "keybinds": {
"leader": "ctrl+x" // リーダーキーを他のキー(例: "ctrl+space"、"alt+x" など)に変更
// 設定内の <leader> プレースホルダーは、ここで設定したキーに自動的に置き換えられます。
  }
}

ショートカットキーを設定する際に必ずしもリーダーキーを使用する必要はありません。通常のキーやコンビネーションキーを直接バインドすることもできます。ただし、ターミナルのショートカットキーとの競合を避けるため、リーダーキーを優先的に使用することをお勧めします。


ショートカットキーの無効化

任意のショートカットキーの値を"none"に設定すると、その操作を無効化できます。無効化後は、どのキーを押しても実行されません:

例

{
  "$schema": "https://opencode.ai/tui.json",
  "keybinds": {
"session_compact": "none", // 「セッションを圧縮」ショートカットキーを無効化
"scrollbar_toggle": "none", // 「スクロールバー切り替え」ショートカットキーを無効化
"tips_toggle": "none" // 「ヒント切り替え」ショートカットキーを無効化
  }
}

全ショートカットキー一覧

1. アプリケーションとインターフェース

操作名 デフォルトのショートカットキー 説明
app_exit ctrl+c, ctrl+d, <leader>q OpenCode を終了
editor_open <leader>e 現在の入力内容を外部エディタで開く
theme_list <leader>t テーマリストを開き、インターフェースのテーマを切り替える
sidebar_toggle <leader>b サイドバーの表示/非表示
scrollbar_toggle なし(デフォルトで無効) スクロールバーの表示/非表示
username_toggle なし(デフォルトで無効) ユーザー名の表示/非表示
status_view <leader>s 現在のステータス情報を表示
tool_details なし(デフォルトで無効) ツール呼び出しの詳細を表示
command_list ctrl+p コマンドパレットを開き、利用可能なすべてのコマンドを検索
tips_toggle <leader>h 使用ヒントの表示/非表示
display_thinking なし(デフォルトで無効) モデルの思考プロセスの表示/非表示
terminal_suspend ctrl+z ターミナルをサスペンド(OpenCode をバックグラウンドに置き、シェルに戻ります;入力:fgで復元できます)
terminal_title_toggle なし(デフォルトで無効) ターミナルのタイトルバーの表示/非表示

2. セッション管理

操作名 デフォルトのショートカットキー 説明
session_new <leader>n 新規セッションを作成
session_list <leader>l すべての履歴セッションのリストを表示
session_export <leader>x 現在のセッションの内容をエクスポート
session_timeline <leader>g 現在のセッションのタイムラインを表示
session_fork なし(デフォルトで無効) 現在の位置からブランチセッションを作成
session_rename なし(デフォルトで無効) 現在のセッションの名前を変更
session_share なし(デフォルトで無効) 現在のセッションを共有
session_unshare なし(デフォルトで無効) 現在のセッションの共有を解除
session_interrupt escape 現在実行中の応答を中断
session_compact <leader>c 現在のセッションのコンテキストを圧縮し、Token の使用量を削減
session_child_first <leader>↓ 最初の子セッションにジャンプ
session_child_cycle <leader>→ 子セッション間を前方にループ切り替え
session_child_cycle_reverse <leader>← 子セッション間を後方にループ切り替え
session_parent <leader>↑ 親セッションに戻る

3. メッセージ閲覧

操作名 デフォルトのショートカットキー 説明
messages_page_up pageup, ctrl+alt+b メッセージを1ページ上にスクロール
messages_page_down pagedown, ctrl+alt+f メッセージを1ページ下にスクロール
messages_line_up ctrl+alt+y 1行上にスクロール
messages_line_down ctrl+alt+e 1行下にスクロール
messages_half_page_up ctrl+alt+u 半ページ上にスクロール
messages_half_page_down ctrl+alt+d 半ページ下にスクロール
messages_first ctrl+g, home 最も古い最初のメッセージにジャンプ
messages_last ctrl+alt+g, end 最新の最後のメッセージにジャンプ
messages_next なし(デフォルトで無効) 次のメッセージにジャンプ
messages_previous なし(デフォルトで無効) 前のメッセージにジャンプ
messages_last_user なし(デフォルトで無効) 最後のユーザーメッセージにジャンプ
messages_copy <leader>y 現在のメッセージの内容をクリップボードにコピー
messages_undo <leader>u 直前の操作を元に戻す
messages_redo <leader>r 元に戻した操作をやり直す
messages_toggle_conceal <leader>h メッセージ内の隠れた内容を折りたたむ/展開する

4. モデルとエージェント

操作名 デフォルトのショートカットキー 説明
model_list <leader>m モデルリストを開き、現在使用中のモデルを選択して切り替える
model_cycle_recent f2 最近使用したモデル間を前方にループ切り替え
model_cycle_recent_reverse shift+f2 最近使用したモデル間を後方にループ切り替え
model_cycle_favorite なし(デフォルトで無効) お気に入りのモデル間を前方にループ切り替え
model_cycle_favorite_reverse なし(デフォルトで無効) お気に入りのモデル間を後方にループ切り替え
variant_cycle ctrl+t 現在のモデルのバリアント(例: thinking モード)間をループ切り替え
agent_list <leader>a エージェントリストを開き、現在使用中のエージェントを選択して切り替える
agent_cycle tab エージェントを前方にループ切り替え
agent_cycle_reverse shift+tab エージェントを後方にループ切り替え

5. 入力ボックス編集

操作名 デフォルトのショートカットキー 説明
input_submit return 現在の入力内容を送信
input_newline shift+return, ctrl+return, alt+return, ctrl+j 入力ボックスに改行を挿入(送信しない)
input_clear ctrl+c 入力ボックスの内容をクリア
input_paste ctrl+v クリップボードの内容を入力ボックスに貼り付け
input_move_left left, ctrl+b カーソルを1文字左に移動
input_move_right right, ctrl+f カーソルを1文字右に移動
input_move_up up カーソルを1行上に移動
input_move_down down カーソルを1行下に移動
input_word_forward alt+f, alt+right, ctrl+right カーソルを1単語前方にジャンプ
input_word_backward alt+b, alt+left, ctrl+left カーソルを1単語後方にジャンプ
input_line_home ctrl+a 現在の行の先頭に移動
input_line_end ctrl+e 現在の行の末尾に移動
input_visual_line_home alt+a 現在の表示行(折り返し表示された行)の先頭に移動
input_visual_line_end alt+e 現在の表示行の末尾に移動
input_buffer_home home 入力ボックス全体の内容の先頭にジャンプ
input_buffer_end end 入力ボックス全体の内容の末尾にジャンプ
input_delete_to_line_end ctrl+k カーソルから現在の行末までのすべての内容を削除
input_delete_to_line_start ctrl+u 現在の行頭からカーソルまでのすべての内容を削除
input_delete_line ctrl+shift+d カーソルがある行全体を削除
input_backspace backspace, shift+backspace カーソルの前の1文字を削除
input_delete ctrl+d, delete, shift+delete カーソルの後の1文字を削除
input_delete_word_forward alt+d, alt+delete, ctrl+delete カーソルの後の1単語を削除
input_delete_word_backward ctrl+w, ctrl+backspace, alt+backspace カーソルの前の1単語を削除
input_undo ctrl+-, super+z 入力ボックス内の直前の編集を元に戻す
input_redo ctrl+., super+shift+z 元に戻した編集をやり直す

6. テキスト選択

操作名 デフォルトショートカットキー 説明
input_select_left shift+left 左に1文字選択
input_select_right shift+right 右に1文字選択
input_select_up shift+up 上に1行選択
input_select_down shift+down 下に1行選択
input_select_word_forward alt+shift+f, alt+shift+right 前方に1単語選択
input_select_word_backward alt+shift+b, alt+shift+left 後方に1単語選択
input_select_line_home ctrl+shift+a カーソル位置から現在の行の先頭まで選択
input_select_line_end ctrl+shift+e カーソル位置から現在の行の末尾まで選択
input_select_visual_line_home alt+shift+a カーソル位置から現在の視覚行の先頭まで選択
input_select_visual_line_end alt+shift+e カーソル位置から現在の視覚行の末尾まで選択
input_select_buffer_home shift+home カーソル位置から入力ボックスの先頭まで選択
input_select_buffer_end shift+end カーソル位置から入力ボックスの末尾まで選択

7. 入力履歴

操作名 デフォルトショートカットキー 説明
history_previous up 1つ前の履歴入力を呼び出す(入力ボックスが空の場合に有効)
history_next down 次の履歴入力を呼び出す

デスクトップ版内蔵入力ショートカットキー

OpenCode デスクトップ版のプロンプト入力ボックスには、追加で一組のReadline / Emacs スタイルのテキスト編集ショートカットキーが内蔵されています。これらのショートカットキーは内蔵機能であり、tui.json変更または無効化することはできません:

ショートカットキー 操作
ctrl+a 現在の行の先頭に移動
ctrl+e 現在の行の末尾に移動
ctrl+b カーソルを後方に1文字移動
ctrl+f カーソルを前方に1文字移動
alt+b カーソルを後方に1単語移動
alt+f カーソルを前方に1単語移動
ctrl+d カーソル位置の文字を削除
ctrl+k カーソルから行末までの内容を削除
ctrl+u カーソルから行頭までの内容を削除
ctrl+w 前の単語を削除
alt+d 後の単語を削除
ctrl+t カーソルの前後2つの文字の位置を入れ替える
ctrl+g 現在のポップアップウィンドウをキャンセル、または実行中の応答を中止する

Shift+Enter での改行設定

一部のターミナルは、デフォルトで修飾キー付きの Enter(例:Shift+Enter)を独立したキーとして送信しないため、OpenCode で押すとShift+Enter改行されず、メッセージが直接送信されます。ターミナルでこのキーのエスケープシーケンスを手動で設定する必要があります。

Windows Terminal での設定方法

ステップ1:Windows Terminal のsettings.jsonファイルを開きます。パスは:

%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json

ステップ2:配列に以下の設定を追加し、送信するactionsエスケープシーケンスのアクションを定義します:Shift+Enter例

例

"actions": [
  {
    "command": {
      "action": "sendInput",
ステップ3:
    },
    "id": "User.sendInput.ShiftEnterCustom"
  }
]

配列にキーバインドを追加し、を上記で定義したアクションにマッピングします:keybindings例Shift+Enterステップ4:

例

"keybindings": [
  {
    "keys": "shift+enter",
    "id": "User.sendInput.ShiftEnterCustom"
  }
]

ファイルを保存した後、Windows Terminal を再起動するか、新しいタブを開いて設定を有効にします。他のターミナル(iTerm2、Kitty、Alacritty など)を使用している場合は、対応するターミナルのドキュメントを参照し、「キーマッピング」または「Key bindings」関連の設定を見つけて、settings.json送信するように設定し、

エスケープシーケンスを送信すればOKです。Shift+Enterその他の拡張\u001b[13;2uAI 思考中...

OpenCode テーマ