You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何让Visual Studio Code将捕获的按键转发至内置终端并保留原快捷键功能?

如何让Visual Studio Code将捕获的按键转发至内置终端并保留原快捷键功能?

我完全懂你想要的这种「两全其美」的效果——既不丢VS Code本身的快捷键功能,又能在需要时把被捕获的按键传给终端,就像tmux双击Ctrl+B那样灵活。下面给你分享两种实用的实现方式:

方法一:模仿tmux的「双击快捷键转发」模式

这是最贴近你需求的方案,比如针对你提到的Ctrl+K,我们可以设置「双击Ctrl+K」来把按键发送给终端,单次按则保留VS Code原本的功能:

  1. 打开VS Code的键盘快捷方式JSON配置:
    Ctrl+K Ctrl+S打开快捷键面板,然后点击右上角的「打开键盘快捷方式(JSON)」按钮(那个大括号图标),进入keybindings.json文件。

  2. 添加以下配置:

    {
        "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"确保只有终端获得焦点时这个快捷键才生效
  3. 保存配置后就能用了:

    • 当终端没焦点时,按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

火山引擎 最新活动