$ cat ~/map/pi-for-vscode.md
Pi for VS Code
把真正的 pi TUI 跑进 VS Code 侧边栏:xterm.js 加真实伪终端,斜杠命令、键位与主题和终端里一模一样。
tools✓ 9月16日
事实速查
- GitHub Stars
- ★ 1
- Forks
- 0
- 许可证
- MIT
- npm / 月
- —
- 最后推送
- 2026年9月15日
安装
从 GitHub releases 页面下载 VSIX(pi-for-vscode-<version>.vsix),可选对照同一 release 里的 SHA256SUMS.txt 校验,再运行 code --install-extension pi-for-vscode-*.vsix——没有 Marketplace 上架## 速览
把真正的 pi TUI 装进 VS Code 侧边栏的扩展——xterm.js 挂在一个 node-pty 真实伪终端上——斜杠命令、键位、主题、/login、会话恢复、鼠标上报与工具审批弹窗都与终端里别无二致,因为它本来就是那个终端。
## 要点
- $真 TUI,不是重新实现:侧边栏经 xterm.js 与真实伪终端运行 pi 本尊,没有任何模拟——斜杠命令、pi 自己的键位、主题、/login、会话恢复、鼠标上报、括号粘贴与全屏 TUI 的表现与终端里完全一致。
- $多会话与代码交接:Pi: New Pi Terminal (Editor Tab) 在代码旁再开一个独立会话;Pi: Send Selection to Pi 把当前选区送进输入框,Pi: Send Current File Reference to Pi 插入 @path 引用,pi 输出里的 path:line:col 会变成可点击的链接并精确跳到位置。
- $在 GUI 环境里找到 pi:自动检测依次搜索 PATH、Homebrew、npm 与 pnpm 全局、Volta、asdf、nvm 和 ~/.local/share/pi-node,最后回落到登录 shell 的 PATH;pi 是个 Node 脚本,而 GUI 启动的 VS Code 常常没有 node 可用,扩展会读取 shebang 并解析出匹配的解释器(优先用 pi 旁边自带的 node);Windows 的 .cmd 与 .bat 垫片则以 cmd.exe /c 包装启动。
- $零原生编译的 PTY:终端层使用与 ABI 无关的 N-API 预编译二进制,同一个 pty.node 在系统 Node 和 VS Code 的 Electron 扩展宿主下都能加载——不需要 Xcode Command Line Tools,也不需要 Visual Studio Build Tools。
- $环境隔离:若 VS Code 本身是从某个 pi 会话里启动的,PI_SESSION_ID、PI_SESSION_FILE 这类继承来的变量会在拉起子 pi 之前被剥离,免得污染它的会话处理。
- $主题、字体与剪贴板联动:终端取色来自 VS Code 的终端 CSS 变量,字体与光标跟随编辑器设置,主题切换时实时更新;复制粘贴走 VS Code 的剪贴板 API,远程、WSL 与网页环境里同样可用。
- $启动可配置:executablePath、--model 或 --continue 之类的附加启动参数、放 API key 的环境变量、autoStart、工作目录模式、字体与字号、回滚行数,以及发送选区时是否自动回车,都在设置项覆盖范围内。
## 常见问题
Q 这个扩展在 VS Code Marketplace 上有吗?
没有。它通过 GitHub Releases 以 VSIX 形式分发——从最新 release 下载 pi-for-vscode-<version>.vsix,可选对照同页发布的 SHA256SUMS.txt 校验,再用 code --install-extension 安装。
Q 为什么用带 PTY 的 webview,而不是 VS Code 内置的终端 API?
稳定的 VS Code API 没有为 createTerminal 提供侧边栏位置,webview 加真实伪终端才是把真 TUI 放进 Activity Bar 的诚实做法——扩展交出的就是终端里的那套 pi 界面。
Q 在容器、远程或 WSL 里 pi 启动不了,先查什么?
显式设置 pi-for-vscode.executablePath。自动检测从容器内部看不到宿主路径;README 的排障一节还指向 Show Logs 输出通道,那里记录着解析出的可执行文件、解释器、工作目录与 pid。
## 参考链接
## 相关条目
## 教程
最后更新: 2026年9月16日