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例
例
{
"command": {
"action": "sendInput",
ステップ3:
},
"id": "User.sendInput.ShiftEnterCustom"
}
]
配列にキーバインドを追加し、を上記で定義したアクションにマッピングします:keybindings例Shift+Enterステップ4:
例
{
"keys": "shift+enter",
"id": "User.sendInput.ShiftEnterCustom"
}
]
ファイルを保存した後、Windows Terminal を再起動するか、新しいタブを開いて設定を有効にします。他のターミナル(iTerm2、Kitty、Alacritty など)を使用している場合は、対応するターミナルのドキュメントを参照し、「キーマッピング」または「Key bindings」関連の設定を見つけて、settings.json送信するように設定し、
OpenCode テーマエスケープシーケンスを送信すればOKです。
Shift+Enterその他の拡張\u001b[13;2uAI 思考中...