ターミナルセットアップ
Pi は信頼性の高い修飾キー検出のために Kitty キーボードプロトコル を使用します。ほとんどのモダンターミナルがこのプロトコルをサポートしますが、一部は設定が必要です。
Kitty、iTerm2
Section titled “Kitty、iTerm2”そのまま動作します。
Apple Terminal
Section titled “Apple Terminal”Pi は利用可能な場合に拡張キー報告を有効化します。Terminal.app が Shift+Enter に plain Return を送り続ける場合、pi はローカル macOS 修飾キーフォールバックを使い、その Return を Shift+Enter として扱います。
このフォールバックは pi が Terminal.app と同じ Mac 上で動作するときのみ機能します。リモート SSH 経由ではローカルキーボードを検出できません。
Ghostty
Section titled “Ghostty”Ghostty 設定(macOS では ~/Library/Application Support/com.mitchellh.ghostty/config、Linux では ~/.config/ghostty/config)に追加:
keybind = alt+backspace=text:\x1b\x7f古い Claude Code バージョンがこの Ghostty マッピングを追加している場合があります:
keybind = shift+enter=text:\nこのマッピングは生の改行バイトを送信します。pi 内部では Ctrl+J と区別できないため、tmux と pi は本物の shift+enter キーイベントを受け取れません。
Claude Code 2.x 以降だけが理由なら削除できます。ただし tmux で Claude Code を使う場合はその Ghostty マッピングが依然必要です。
そのリマップ経由で tmux 内の Shift+Enter を維持したい場合、~/.pi/agent/keybindings.json の pi newLine キーバインドに ctrl+j を追加:
{ "newLine": ["shift+enter", "ctrl+j"]}WezTerm
Section titled “WezTerm”WezTerm は通常 xterm modifyOtherKeys 経由で Shift+Enter がそのまま動作します。Kitty キーボードプロトコルを明示的に使うには ~/.wezterm.lua を作成:
local wezterm = require 'wezterm'local config = wezterm.config_builder()config.enable_kitty_keyboard = truereturn configmacOS では WezTerm がデフォルトで Option+Enter を全画面にバインドします。pi のフォローアップキューに Option+Enter を使うにはこのキーオーバーライドを追加:
local wezterm = require 'wezterm'local config = wezterm.config_builder()config.keys = { { key = 'Enter', mods = 'ALT', action = wezterm.action.SendString('\x1b[13;3u'), },}return config既に config.keys テーブルがある場合はそこにエントリを追加。
WSL では IME 候補ウィンドウ位置のため可視ハードウェアカーソルが必要な場合があります。CJK IME 候補がテキストカーソルに追従しない場合、pi 実行前に PI_HARDWARE_CURSOR=1 を設定するか、設定で showHardwareCursor を true に。
Alacritty
Section titled “Alacritty”Alacritty は通常 Shift+Enter がそのまま動作します。macOS では Option+Enter が plain Enter として届く場合があります。pi フォローアップキューに Option+Enter を使うには ~/.config/alacritty/alacritty.toml に追加:
[[keyboard.bindings]]key = "Enter"mods = "Alt"chars = "\u001b[13;3u"設定変更後 Alacritty を再起動。
VS Code(統合ターミナル)
Section titled “VS Code(統合ターミナル)”VS Code 1.109.5 以降は統合ターミナルで Kitty キーボードプロトコルをデフォルト有効化するため、Shift+Enter はそのまま動作するはずです。
1.109.5 未満の VS Code では Shift+Enter 用の明示的ターミナルキーバインドが必要です。
keybindings.json の場所:
- macOS:
~/Library/Application Support/Code/User/keybindings.json - Linux:
~/.config/Code/User/keybindings.json - Windows:
%APPDATA%\\Code\\User\\keybindings.json
keybindings.json に追加:
{ "key": "shift+enter", "command": "workbench.action.terminal.sendSequence", "args": { "text": "\u001b[13;2u" }, "when": "terminalFocus"}Windows Terminal
Section titled “Windows Terminal”pi が使う修飾 Enter キーを転送するため settings.json に追加(Ctrl+Shift+, または 設定 → JSON ファイルを開く):
{ "actions": [ { "command": { "action": "sendInput", "input": "\u001b[13;2u" }, "keys": "shift+enter" }, { "command": { "action": "sendInput", "input": "\u001b[13;3u" }, "keys": "alt+enter" } ]}Shift+Enterは改行を挿入。- Windows Terminal はデフォルトで
Alt+Enterを全画面にバインド。pi がフォローアップキュー用のAlt+Enterを受け取れません。 Alt+EnterをsendInputにリマップすると本物のキーコードが pi に転送されます。
既に actions 配列がある場合はオブジェクトを追加。古い全画面動作が残る場合は Windows Terminal を完全に閉じて再起動。
xfce4-terminal、terminator
Section titled “xfce4-terminal、terminator”これらのターミナルはエスケープシーケンスサポートが限定的です。Ctrl+Enter や Shift+Enter など修飾 Enter は plain Enter と区別できず、submit: ["ctrl+enter"] などのカスタムキーバインドが動作しません。
最高の体験には Kitty キーボードプロトコルをサポートするターミナルを使用:
IntelliJ IDEA(統合ターミナル)
Section titled “IntelliJ IDEA(統合ターミナル)”組み込みターミナルはエスケープシーケンスサポートが限定的です。IntelliJ ターミナルでは Shift+Enter を Enter と区別できません。
ハードウェアカーソルを表示したい場合、pi 実行前に PI_HARDWARE_CURSOR=1 を設定(互換性のためデフォルト無効)。
最高の体験には専用ターミナルエミュレータの使用を検討。