终端配置
Pi 使用 Kitty 键盘协议 实现可靠的修饰键检测。大多数现代终端支持该协议,但部分需要配置。
Kitty、iTerm2
Section titled “Kitty、iTerm2”开箱即用。
Apple Terminal
Section titled “Apple Terminal”Pi 在可用时启用增强按键报告。若 Terminal.app 仍将 plain Return 用于 Shift+Enter,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 config在 macOS 上,WezTerm 默认将 Option+Enter 绑定为全屏。要将 Option+Enter 用于 pi 后续消息排队,添加此按键覆盖:
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 上,WezTerm 可能需要可见的硬件光标以正确定位 IME 候选窗口。若 CJK IME 候选不跟随文本光标,在运行 pi 前设置 PI_HARDWARE_CURSOR=1,或在设置中将 showHardwareCursor 设为 true。
Alacritty
Section titled “Alacritty”Alacritty 通常开箱即用支持 Shift+Enter。在 macOS 上,Option+Enter 可能以 plain Enter 到达。要将 Option+Enter 用于 pi 后续排队,添加到 ~/.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”添加到 settings.json(Ctrl+Shift+, 或 设置 → 打开 JSON 文件)以转发 pi 使用的修饰 Enter 键:
{ "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(默认禁用以兼容)。
考虑使用专用终端模拟器以获得最佳体验。