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

Mac系统中Visual Studio Code的Vim扩展将Caps Lock键映射为ESC的配置及问题排查

Caps Lock as ESC Not Working with VSCode Vim Extension on Mac? Here's How to Fix It

我自己从Ubuntu迁移到MacBook的时候也踩过这个一模一样的坑,结合你的配置来看,100%是GitLens和Vim扩展的快捷键冲突了——你把capslock同时绑定给了两个扩展的escape指令,Mac上VSCode的快捷键优先级会让GitLens的绑定先触发,直接把Vim的escape操作给“抢”走了。

下面是几个亲测有效的解决办法:

方法1:给GitLens的绑定加排他条件

修改GitLens的快捷键配置,让它只在Vim未激活的时候生效,这样就不会和Vim的操作冲突了。把你的GitLens相关配置改成这样:

{ 
  "key": "capslock", 
  "command": "gitlens.key.escape", 
  "when": "editorTextFocus && gitlens:key:escape && !findWidgetVisible && !isInEmbeddedEditor && !renameInputVisible && !suggestWidgetVisible && !vim.active" 
},
{ 
  "key": "escape", 
  "command": "-gitlens.key.escape", 
  "when": "editorTextFocus && gitlens:key:escape && !findWidgetVisible && !isInEmbeddedEditor && !renameInputVisible && !suggestWidgetVisible" 
}

核心就是在when条件最后加了!vim.active,意思是“只有当Vim没激活的时候,这个绑定才生效”。

方法2:给Vim的绑定加更高优先级的条件

如果你更习惯优先保证Vim的escape功能,也可以反过来修改Vim的绑定,让它在GitLens的escape场景不触发时生效:

{ 
  "key": "capslock", 
  "command": "extension.vim_escape", 
  "when": "editorTextFocus && vim.active && !inDebugRepl && !gitlens:key:escape" 
},
{ 
  "key": "escape", 
  "command": "-extension.vim_escape", 
  "when": "editorTextFocus && vim.active && !inDebugRepl" 
}

额外检查:系统级映射是否真的生效

虽然你说已经把Caps Lock映射成ESC了,但Mac有时候会有小bug导致映射没生效,你可以快速验证一下:

  • 打开「系统偏好设置」→「键盘」→「修饰键」,确认Caps Lock的下拉选项是「Escape」
  • 打开VSCode的命令面板(按Cmd+Shift+P),输入Keyboard Shortcuts: Toggle Record Keybinding,按下Caps Lock,看VSCode识别的是escape还是capslock
    • 如果是escape:系统映射没问题,问题就是快捷键冲突
    • 如果是capslock:系统映射没生效,重启一下Mac或者重新设置修饰键试试

快速验证冲突的方法

暂时禁用GitLens扩展,然后打开代码文件进入Vim插入模式(按i),按下Caps Lock看能不能回到正常模式。如果可以,就彻底确认是GitLens的冲突了,用上面的方法调整配置就行。

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

火山引擎 最新活动