PiPi
快速开始
使用 Pi
  • 简体中文
  • English
快速开始
使用 Pi
  • 简体中文
  • English
  • 从这里开始

    • 快速开始
    • 使用 Pi
    • 提供商
    • 安全
    • 容器化
    • 设置
    • 键位绑定
    • 会话
    • 压缩与分支总结
  • 自定义

    • 扩展
    • 技能
    • 提示词模板
    • 主题
    • Pi 包
    • 自定义模型
    • 自定义提供商
  • 参考

    • 会话文件格式
  • 编程式使用

    • SDK
    • RPC 模式
    • JSON 事件流模式
    • TUI 组件
  • 平台设置

    • Windows 设置
    • Termux(Android)设置
    • tmux 设置
    • 终端设置
    • Shell 别名
  • 开发

    • 开发

终端设置

Pi 使用 Kitty 键盘协议 来可靠检测修饰键。大多数现代终端都支持此协议,但有些需要配置。

Kitty、iTerm2

开箱即用。

Apple Terminal

Pi 会在可用时启用增强按键上报。如果 Terminal.app 仍然为 Shift+Enter 发送普通 Return,pi 会使用本地 macOS 修饰键回退机制,将该 Return 视为 Shift+Enter。

此回退机制仅在 pi 与 Terminal.app 运行在同一台 Mac 上时有效。它无法通过远程 SSH 检测本地键盘。

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 映射。

Pi 默认将 Ctrl+J 绑定为换行别名,因此通过该重映射,Shift+Enter 在 tmux 中仍可正常工作,无需额外 pi 配置。

WezTerm

WezTerm 通常可通过 xterm modifyOtherKeys 开箱支持 Shift+Enter。要显式使用 Kitty 键盘协议,请创建 ~/.wezterm.lua:

local wezterm = require 'wezterm'
local config = wezterm.config_builder()
config.enable_kitty_keyboard = true
return 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

Alacritty 通常开箱支持 Shift+Enter。在 macOS 上,Option+Enter 可能会作为普通 Enter 到达。要将 Option+Enter 用于 pi 后续队列,请添加到 ~/.config/alacritty/alacritty.toml:

[[keyboard.bindings]]
key = "Enter"
mods = "Alt"
chars = "\u001b[13;3u"

更改配置后重启 Alacritty。

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

添加到 settings.json(Ctrl+Shift+, 或 Settings → Open JSON file),以转发 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

这些终端的转义序列支持有限。像 Ctrl+Enter 和 Shift+Enter 这样的带修饰键 Enter 无法与普通 Enter 区分,因此 submit: ["ctrl+enter"] 等自定义键绑定无法工作。

为获得最佳体验,请使用支持 Kitty 键盘协议的终端:

  • Kitty
  • Ghostty
  • WezTerm
  • iTerm2
  • Alacritty(需要编译时包含 Kitty 协议支持)

IntelliJ IDEA(集成终端)

内置终端的转义序列支持有限。Shift+Enter 在 IntelliJ 终端中无法与 Enter 区分。

如果你希望硬件光标可见,请在运行 pi 前设置 PI_HARDWARE_CURSOR=1(默认出于兼容性关闭)。

建议使用专用终端模拟器以获得最佳体验。

最近更新:: 2026/7/6 09:32
Contributors: seepine
Prev
tmux 设置
Next
Shell 别名