从VSCode+Vim到Neovim的救赎:我是如何实现快捷键无缝迁移的?

背景:VSCode+Vim插件的痛点

在过去的两年里,我始终以「VSCode + Vim插件」作为主力开发环境。这种组合让我既能享受VSCode的插件生态与图形化调试能力,又能通过Vim模式保持编码效率。但随着时间的推移有如下问题:

  1. VSCode自身性能问题(对8起)

  2. 大文件卡顿,动辄2/3000 行的TypeScript文件类型审查(我承认代码屎)、习惯性的写完按下Command S保存自动格式化、等待自动补全触发建议 之类的时间让我感觉和天天坐牢没什么区别。

  3. Vim插件毕竟模拟器,支持的Vim功能有限

我曾多次尝试切换到终端Neovim,但总出于接下来某些个原因放弃了。

困境:性能与习惯的拉锯战

  1. 快捷键适应成本 ​:从踏入前端到今天这么多年,习惯了在Command修饰下快速打开文件,快速模糊搜索,快速这样那样的行为。GUI多用Command键修饰,Vim运行在终端侧,终端对Command键识别有限,Vim默认也没有Command修饰的快捷键,每次使用Ctrl修饰就算了,常用的功能快捷键也至少要按下3个键这让我无法接收。

  2. 配置地狱 ​:插件管理、LSP集成、Treesitter等等超多的配置需要反复试错,虽然有很多开箱即用的套餐,但是谁能情愿抛弃以前的习惯直接不修改使用它们的呢?配置过程中还会遇到很多快捷键冲突的问题,功能上稍有一些不如IDE的功能我都想解决掉它,这很容易又跌跌撞撞n久。

  3. Lua语言门槛 ​:从适合宝宝体质的JSON配置到LuaVimScript的跨度,以及社区文档的碎片化,这又对我(萌新)进行无情的打击。

  4. 爱美之心 ​:终端渲染效果远不如IDE,不论抗锯齿、图形库。终端能表达的内容有限,目前社区的主题色也不如VSCode插件市场丰富(在此给大佬们磕一个)。

  5. ...

救赎:我的解决办法

最近清明节期间,我实在是无聊想再试一次,根据之前的配置进度又进行了一些探索,又站在了性能焦虑肌肉记忆依赖的选择路口,不过这次我想到了一个解决办法。

在此之前我一直使用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中常用的如下功能:

  1. 打开关闭文件目录(nvim-tree)
  2. 按名称搜索文件(telescope)
  3. 全局搜索(telescope)
  4. 在分屏和目录树中光标跳转(原生分屏功能)

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

结尾

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

相关推荐
笨笨饿3 小时前
#137_死机恢复现场_Armino平台AP系统swd调试
git·python·stm32·单片机·嵌入式硬件·物联网·vim
晚风叙码2 天前
Linux(三)apt/yum 软件安装与 vim 编辑器入门指南
linux·编辑器·vim
一直C3 天前
Linux网络编程|HTTP协议详解(报文、请求方法、状态码)
linux·http·wireshark·vim·visual studio
一直C4 天前
Linux应用软件编程|TCP协议与Socket全套编程(三次握手、四次挥手、报文头部、核心机制)
linux·网络协议·tcp/ip·wireshark·vim·visual studio
一直C7 天前
Linux系统编程|信号进阶 + SystemV IPC(消息队列、共享内存)
linux·c语言·开发语言·算法·青少年编程·vim
zhangfeng11338 天前
nano vim 有没有快速编辑的 方式 比如鼠标选择 ,然后快速修改 替换
编辑器·vim
也曾看到过繁星9 天前
Linux---vim 编辑器
linux·编辑器·vim
Tanner_SL10 天前
Linux笔记之vim操作
linux·vim
一直C11 天前
【Linux应用编程】深入理解Linux多任务机制:进程原理、状态转换与进程控制实战
linux·开发语言·算法·ubuntu·vim·visual studio code
笨笨饿14 天前
#110_SCH3000 平台图传系统配置指南:从 DVP 摄像头到 UVC/WiFi 双通道传输
c语言·stm32·单片机·嵌入式硬件·物联网·vim