カスタムキーバインド

キー入力を特定のアクションに関連付ける。

Ghostty は keybind 設定オプション を通じて柔軟なカスタムキーバインドをサポートします。設定リファレンスにはこのオプションの詳細なリファレンスドキュメントがありますが、このページでは Ghostty でキーバインドを指定する方法の概要を説明します。

Note

CLI コマンド list-keybinds で Ghostty の利用可能なキーバインドをすべて一覧できます。デフォルトを確認するにはこれを実行します:

ghostty +list-keybinds --default

キーバインド設定の基本構文は:

keybind = trigger=action

トリガー

キーバインドの trigger 部分は、アクションを発生させるキー入力イベントを指定します。トリガーは単一のキー、修飾キー付きの単一キー、連続するキーのシーケンスのいずれかです。

トリガーは 0 個以上の修飾キーと 1 つのキーの組み合わせです。たとえば a、ctrl+a、ctrl+shift+a、ctrl+alt+a はいずれも有効なトリガーです。

利用可能なキーの集合は現時点では ソースコードを見る ことで参照できます。この一覧は Chromium の keycode から派生しており、USB HID コードを持つキーと強く結び付いています。

キーがこの一覧にない場合、Unicode コードポイントを指定することもできます。キーが単一の Unicode コードポイントに復号できるなら、Ghostty はそれを有効なトリガーとみなし、そのコードポイントを生成するキー入力イベントが起きるとトリガーが発動します。これは US 以外のキーボードレイアウトで特に有用です。

たとえばドイツ語キーボードでは、以下の設定で "ö" をバインドできます。"ö" キー(US 物理キーボードでは ";")は Unicode 上の "ö" を生成するため、押すと発動します。

keybind = ctrl+ö=action

修飾キー

有効な修飾キーは:

  • shift
  • ctrl(別名:control)
  • alt(別名:opt、option)
  • super(別名:cmd、command)

Note

キーボードの fn または「地球儀」キーは修飾キーとしてサポートされていません。これは Ghostty が使う OS と GUI ツールキットの制限です。

トリガーのプレフィックス

トリガーには、キーバインドの挙動を変えるいくつかの特別な値を前置きできます。以下に列挙します。

キーバインドのトリガーは、プレフィックスの組み合わせごとに一意ではありません。たとえば ctrl+a と global:ctrl+a は別々の 2 つのキーバインドではありません。後から設定されたキーバインドが先のものを上書きします。この場合、global: のキーバインドが使われます。

プレフィックスは複数指定できます。たとえば global:unconsumed:ctrl+a=reload_config は、キーバインドをグローバルにしつつ、入力を消費せずに設定を再読み込みします。

all:

キーバインドをすべてのターミナル表面に適用します。デフォルトではキーバインドはフォーカスされたターミナル表面にのみ適用されます。これが true なら、キーバインドはすべてのターミナル表面に送られます。これは surface 固有のアクションにのみ関係します。すでにグローバルなアクション(quit など)には、このプレフィックスは効果ありません。

global:

キーバインドをグローバルにします。デフォルトではキーバインドは Ghostty 内の、正しい条件下(アプリがフォーカスされている、ときにターミナルがフォーカスされている等)でのみ機能します。システム全体で(Ghostty がフォーカスされていなくても)機能するキーバインドにしたいときは、このプレフィックスを指定します。このプレフィックスは all: を含意します。注:すべての環境で機能するわけではありません。詳細は下の補足を参照してください。

この機能は macOS でのみサポートされます。macOS では、この機能は Ghostty へのアクセシビリティ権限の付与を必要とします。global: のキーバインドが指定されて Ghostty が起動または再読み込みされると、Ghostty はこれらの権限を要求しようとします。権限が許可されないと、キーバインドは機能しません。macOS では、これらの権限はシステム環境設定 -> プライバシーとセキュリティ -> アクセシビリティで見つけられます。

Note

global: プレフィックスは macOS でのみ利用可能です。

unconsumed:

入力を消費しません。デフォルトではキーバインドは入力を消費します。つまり、関連するエンコーディング(ある場合)はターミナル上で実行中のプログラムに送られません。エンコードされた値をプログラムに送りたい場合は、キーバインド全体の前に unconsumed: プレフィックスを指定します。例:unconsumed:ctrl+a=reload_config。

global: と all: 付きのキーバインドは、この設定に関係なく常に入力を消費します。特定のターミナル表面に関連付けられていないため、決してエンコードされないからです。

performable:

アクションが実行可能な場合にのみ入力を消費します。たとえば copy_to_clipboard アクションは、コピーすべき選択がある場合にのみ入力を消費します。選択がなければ、Ghostty はキーバインドが設定されていないかのように振る舞います。global: や all: 付きのキーバインドには効果がありません。キーシーケンスでは、アクションが実行不能な場合にシーケンスをリセットします(キーバインドが一切ない場合と同じ挙動)。

実行可否つきのキーバインドはアプリケーションメニューのメニューショートカットとしては表示されません。メニューショートカットは端末の状態にかかわらずアクションを強制実行するためです。実行可否つきのキーバインドは引き続き機能しますが、メニューのショートカットラベルとしては現れません。

例:

keybind = performable:ctrl+c=copy_to_clipboard

アクション

アクションはトリガーが発動したときに起きることです。action の形式、またはパラメータが必要なアクションなら action:parameter の形式です。

キーバインドで使える一般的なアクションの例を示します。完全な一覧はアクションの完全なリスト を参照してください。Ghostty は数十のアクションをサポートします。

アクション説明
ignore何もせず、キー入力を無視する。特定の入力を「ブラックホール」して、効果もエンコードも生じさせないようにできる。
unbindバインドを除去する。以前のアクションが削除され、キーは印字可能なら子コマンドへそのまま渡される。
text:text文字列を送る。Zig 文字列リテラル構文を使用。たとえば text:\x15 は Ctrl-U を送る。\x1b[ プレフィックスで制御シーケンスも送れるが、便宜アクションの csi: と esc: の利用が推奨される。
csi:textCSI シーケンスを送る。たとえば csi:A は「カーソル上移動」を送る。
esc:textエスケープシーケンスを送る。たとえば esc:d は右の単語末まで削除する。