如何让Visual Studio Code将捕获的按键转发至内置终端并保留原快捷键功能?
如何让Visual Studio Code将捕获的按键转发至内置终端并保留原快捷键功能?
我完全懂你想要的这种「两全其美」的效果——既不丢VS Code本身的快捷键功能,又能在需要时把被捕获的按键传给终端,就像tmux双击Ctrl+B那样灵活。下面给你分享两种实用的实现方式:
方法一:模仿tmux的「双击快捷键转发」模式
这是最贴近你需求的方案,比如针对你提到的Ctrl+K,我们可以设置「双击Ctrl+K」来把按键发送给终端,单次按则保留VS Code原本的功能:
打开VS Code的键盘快捷方式JSON配置:
按Ctrl+K Ctrl+S打开快捷键面板,然后点击右上角的「打开键盘快捷方式(JSON)」按钮(那个大括号图标),进入keybindings.json文件。添加以下配置:
{ "key": "ctrl+k ctrl+k", "command": "workbench.action.terminal.sendSequence", "args": { "text": "\u000B" }, // 这是Ctrl+K的ASCII控制字符转义 "when": "terminalFocus" }简单解释:
ctrl+k ctrl+k就是我们设置的「双击触发」快捷键workbench.action.terminal.sendSequence是VS Code内置的向终端发送按键序列的命令"\u000B"对应Ctrl+K的Unicode转义(Ctrl+字母的转义规则:A对应\u0001,B对应\u0002,以此类推,K是第11个字母,所以是\u000B)"when": "terminalFocus"确保只有终端获得焦点时这个快捷键才生效
保存配置后就能用了:
- 当终端没焦点时,按
Ctrl+K还是正常触发VS Code的原有命令 - 当终端有焦点时,单次按
Ctrl+K依然会被VS Code捕获(如果有对应命令的话),但双击Ctrl+K就会把Ctrl+K发送给终端,让终端里的程序接收到这个按键
- 当终端没焦点时,按
方法二:自定义前缀键转发(更灵活)
如果你不想双击常用快捷键,也可以设置一个专属前缀键,比如Ctrl+Alt+T,之后再按被捕获的按键,就会转发给终端:
同样在keybindings.json里添加:
{ "key": "ctrl+alt+t ctrl+k", "command": "workbench.action.terminal.sendSequence", "args": { "text": "\u000B" }, "when": "terminalFocus" }
这样当终端聚焦时,先按Ctrl+Alt+T再按Ctrl+K,就能把Ctrl+K传给终端,而单独按Ctrl+K还是保留VS Code的功能。
小技巧:快速获取按键的转义字符
如果你需要转发其他按键(比如Ctrl+B),可以用这个简单方法找转义字符:
- 打开VS Code的「命令面板」(
Ctrl+Shift+P),输入「Insert Unicode Control Character」 - 在弹出的列表里找到对应的按键(比如「Ctrl+B」),插入后就能看到对应的转义值(Ctrl+B是
\u0002),直接复制到配置里就行
备注:内容来源于stack exchange,提问作者vmonteco




