背景:VSCode+Vim插件的痛点
在过去的两年里,我始终以「VSCode + Vim插件」作为主力开发环境。这种组合让我既能享受VSCode的插件生态与图形化调试能力,又能通过Vim模式保持编码效率。但随着时间的推移有如下问题:
-
VSCode自身性能问题(对8起)
-
大文件卡顿,动辄2/3000 行的TypeScript文件类型审查(我承认代码屎)、习惯性的写完按下
Command S
保存自动格式化、等待自动补全 和触发建议 之类的时间让我感觉和天天坐牢没什么区别。 -
Vim插件毕竟模拟器,支持的Vim功能有限
我曾多次尝试切换到终端Neovim
,但总出于接下来某些个原因放弃了。
困境:性能与习惯的拉锯战
-
快捷键适应成本 :从踏入前端到今天这么多年,习惯了在
Command
修饰下快速打开文件,快速模糊搜索,快速这样那样的行为。GUI多用Command
键修饰,Vim运行在终端侧,终端对Command
键识别有限,Vim默认也没有Command修饰的快捷键,每次使用Ctrl
修饰就算了,常用的功能快捷键也至少要按下3个键这让我无法接收。 -
配置地狱 :插件管理、LSP集成、Treesitter等等超多的配置需要反复试错,虽然有很多开箱即用的套餐,但是谁能情愿抛弃以前的习惯直接不修改使用它们的呢?配置过程中还会遇到很多快捷键冲突的问题,功能上稍有一些不如
IDE
的功能我都想解决掉它,这很容易又跌跌撞撞n久。 -
Lua语言门槛 :从适合宝宝体质的JSON配置到
Lua
、VimScript
的跨度,以及社区文档的碎片化,这又对我(萌新)进行无情的打击。 -
爱美之心 :终端渲染效果远不如
IDE
,不论抗锯齿、图形库。终端能表达的内容有限,目前社区的主题色也不如VSCode插件市场丰富(在此给大佬们磕一个)。 -
...
救赎:我的解决办法
最近清明节期间,我实在是无聊想再试一次,根据之前的配置进度又进行了一些探索,又站在了性能焦虑 与肌肉记忆依赖的选择路口,不过这次我想到了一个解决办法。
在此之前我一直使用HHKB键盘,也习惯了使用Karabiner进行按键映射,像最常见的映射上下左右,我自己也配置了一些其他映射。但我之前没有想到可以通过改键的方式延续Command
修饰快捷键,很快我就尝试了这个办法。
方案1:
我使用Karabiner 修改映射,实现使用VSCode搜索的快捷键
映射触发telescope搜索快捷键
,下面是Karabiner的配置:
json
{
"description": "cmd+shfit+f -> <leader>fw",
"manipulators": [
{
"from": {
"key_code": "f",
"modifiers": {
"mandatory": [
"left_command",
"left_shift"
],
"optional": [
"any"
]
}
},
"to": [
{
"key_code": "spacebar",
"modifiers": []
},
{
"key_code": "f",
"modifiers": []
},
{
"key_code": "w",
"modifiers": []
}
],
"type": "basic"
}
]
}

Nice~这很有效,但Karabiner它无法限制映射的生效范围,这个快捷键显然不是系统通用快捷键,配置了它之后在任何一个软件中都会触发这个映射,但是一旦思路打开了这很快就不是问题。
方案2:
我平时很喜欢找一些好玩好用的软件插件,我还有一个很常用的软件Keyboard Maestro,它可以实现类似的功能并且它可以限制触发范围,通过录制一个宏,再通过快捷键触发这个宏,这个宏间接的去调用折磨人的Vim快捷键就可以啦!
我先配置了在VSCode中常用的如下功能:
- 打开关闭文件目录(nvim-tree)
- 按名称搜索文件(telescope)
- 全局搜索(telescope)
- 在分屏和目录树中光标跳转(原生分屏功能)

它的配置方式很简单,以其中一个为例,首先左侧第一栏可以创建一个组统一限制这些宏都会在哪个app中触发,我这里选择的是iTerm,然后创建宏之后,右侧选择快捷键触发方式,这个快捷键是你习惯的快捷键,下面的执行动作设置为Vim晦涩的快捷键即可。

结尾
当配置好这些基础快捷键就能愉快的成为原始人了,VSCode中还有一些好用的快捷键目前没有调研Vim侧是否有可以代替的插件。另外这样配置还有一个好处是可以避免快捷键冲突,通过Command和Ctrl隔离,可以把一些Vim侧快捷键设置为使用频率不高的字符键,然后通过Command加高频键随意调用例如: Command a --> Ctrl mmi..