VSCode 1.68.1按F8运行PowerShell7.2.5选段后代码重复粘贴终端问题
诱发原因
该问题属于版本兼容bug,和列出的F8按键绑定规则无关:
VS Code 1.68版本调整了集成终端的焦点切换回调逻辑,而当时发布的PowerShell扩展版本没有做对应适配:执行PowerShell.RunSelection(即F8绑定的运行选中PowerShell代码命令)时,扩展会先把选中的代码发送到PowerShell集成终端执行,流程走完后没有正确清理暂存的代码文本缓存;当执行结束焦点落回集成终端时,终端会误把缓存里的代码识别为用户手动粘贴的内容,直接填充到输入行。
只有PowerShell 7.2.5集成终端会触发该问题,是因为PowerShell扩展对内置pwsh集成终端走专用的PSRP通信通道,和普通外部终端的代码发送逻辑完全独立,兼容问题只出在这条专用逻辑链路里。
修复方法
按优先级从高到低可选以下方案:
- 优先升级修复:直接将VS Code内的PowerShell扩展升级到2022.6.3及以上版本,该版本官方已经适配了VS Code 1.68的终端逻辑变更,升级完成后重启VS Code即可彻底解决异常,不需要修改任何配置。
- 临时规避:如果暂时无法升级扩展,可在异常出现时按一次
Esc键清空终端输入行的冗余内容,不会影响代码执行结果和后续操作。 - 配置兜底:如果受环境限制无法升级扩展或VS Code,可手动修改按键绑定配置兜底:打开VS Code的
keybindings.json文件,将原有F8对应PowerShell运行选中命令的条目替换为如下配置,关闭运行后自动聚焦终端的逻辑,避免触发缓存误识别:
{ "key": "f8", "command": "PowerShell.RunSelection", "when": "editorTextFocus && editorLangId == 'powershell' && !terminalFocus", "args": { "focusConsoleAfterRun": false } }
保存配置后重启VS Code即可生效。
如果不需要保留VS Code 1.68的新特性,也可以直接将VS Code回退到1.67.x版本,从根源上避开本次终端逻辑变更带来的兼容问题。
内容的提问来源于stack exchange,提问作者Keith
相关产品推荐
相关产品推荐

