You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在VS Code扩展中通过代码添加Caps Lock按键绑定?

实现VS Code扩展自动绑定Caps Lock到大小写切换命令

官方推荐方案:通过package.json声明默认快捷键绑定

这是最标准的实现方式,用户安装扩展后会自动应用该绑定,且不强制用户——他们仍可在个人快捷键设置中自定义覆盖。

在你的扩展根目录的package.json里添加contributes.keybindings字段:

{
  "name": "your-extension-name",
  "displayName": "Your Extension Display Name",
  // 其他必填字段...
  "contributes": {
    "keybindings": [
      {
        "command": "your-extension-id.changeCase", // 替换为你实际的命令ID
        "key": "CapsLock",
        "when": "editorTextFocus", // 仅编辑器有焦点时生效,避免干扰其他操作
        "mac": "CapsLock" // Mac平台绑定与其他平台一致,可省略
      }
    ]
  }
}

程序化修改用户快捷键(可选,需用户授权)

如果需要动态控制绑定(比如根据用户设置开关),可以通过VS Code API修改全局快捷键配置,但这种方式会修改用户的个人设置,必须征得用户同意:

在你的扩展激活逻辑中添加以下代码:

import * as vscode from 'vscode';

export function activate(context: vscode.ExtensionContext) {
  // 注册changeCase命令(替换为你已实现的大小写切换逻辑)
  const changeCaseCmd = vscode.commands.registerCommand('your-extension-id.changeCase', () => {
    const editor = vscode.window.activeTextEditor;
    if (!editor) return;

    const { document, selection } = editor;
    const text = document.getText(selection);
    let newText: string;

    // 实现Gboard式循环切换:小写→标题→大写→小写
    if (text === text.toLowerCase()) {
      newText = text.replace(/\b\w/g, c => c.toUpperCase());
    } else if (text === text.toUpperCase()) {
      newText = text.toLowerCase();
    } else {
      newText = text.toUpperCase();
    }

    editor.edit(editBuilder => editBuilder.replace(selection, newText));
  });

  context.subscriptions.push(changeCaseCmd);

  // 检查并请求设置快捷键
  const keybindingsConfig = vscode.workspace.getConfiguration('keybindings');
  const existingBindings = keybindingsConfig.get<Array<Record<string, any>>>('keybindings') || [];
  
  const hasTargetBinding = existingBindings.some(b => 
    b.command === 'your-extension-id.changeCase' && b.key === 'CapsLock'
  );

  if (!hasTargetBinding) {
    vscode.window.showInformationMessage(
      '是否允许本扩展将Caps Lock设置为文本大小写切换快捷键?',
      '允许', '拒绝'
    ).then(choice => {
      if (choice === '允许') {
        existingBindings.push({
          command: 'your-extension-id.changeCase',
          key: 'CapsLock',
          when: 'editorTextFocus'
        });
        keybindingsConfig.update(
          'keybindings',
          existingBindings,
          vscode.ConfigurationTarget.Global
        ).then(() => {
          vscode.window.showInformationMessage('Caps Lock快捷键已成功设置');
        }).catch(err => {
          vscode.window.showErrorMessage(`设置失败:${err.message}`);
        });
      }
    });
  }
}

注意事项

  • 优先使用package.json贡献点方案,这是VS Code扩展的标准做法,对用户更友好
  • 程序化修改配置会写入用户的全局快捷键设置,卸载扩展后不会自动移除,需要用户手动清理
  • 确保命令ID与package.json中声明的完全一致

内容的提问来源于stack exchange,提问作者Sherpad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 14:05:21