VS Code如何为大小写转换命令配置共用键绑定的when条件
同快捷键触发大小写转换的实现方案
VS Code 原生没有暴露「当前选中文本大小写状态」相关的内置上下文键,所以你翻遍官方when上下文文档也找不到可用的判定属性,不用在这个方向耗时间。可落地的实现方式有两种:
自定义命令实现状态判断逻辑
安装支持编写自定义编辑器命令的扩展,自己写一个简单的复合命令,把判断逻辑内置在命令里,不需要依赖when子句做判定:- 触发快捷键时,先获取当前编辑器的选中片段文本
- 判断文本的大小写状态:如果选中文本全为大写(排除无大小写区别的字符,比如数字、符号),就执行转小写命令;反之就执行转大写命令
- 最后给这个自定义命令绑定你想要的快捷键即可
核心判断逻辑参考如下:
// 注意VS Code原生大小写转换命令的正确ID,你之前写的命令名缺前缀还存在拼写错误 const COMMAND_LOWER = 'editor.action.transformToLowercase' const COMMAND_UPPER = 'editor.action.transformToUppercase' const selected = window.activeTextEditor.document.getText(window.activeTextEditor.selection) // 过滤掉无大小写属性的字符后再做判断 const caseAwareChars = selected.replace(/[^a-zA-Z]/g, '') const isAllUpper = caseAwareChars.length > 0 && caseAwareChars === caseAwareChars.toUpperCase() commands.executeCommand(isAllUpper ? COMMAND_LOWER : COMMAND_UPPER)这种方式的匹配逻辑最符合你的需求,不会出现误触发。
命令切换类扩展实现
用支持多命令轮询切换的快捷键扩展,把转大写、转小写配置为同快捷键的轮询项,但这种方式不会识别当前文本的实际状态,只会按照操作顺序轮流触发两个命令,匹配精度差,只适合固定来回切换的场景,不推荐优先使用。
补充说明:截止当前VS Code稳定版,官方确实没有开放选中文本特征相关的上下文键,所有依赖文本内容做判断的快捷键逻辑,都只能通过自定义命令包裹的方式实现。
内容的提问来源于stack exchange,提问作者M. Almog
相关产品推荐
相关产品推荐

