VSCode Neovim:把完整的 Vim 搬进 VSCode
VSCode Neovim:把完整的 Vim 搬进 VSCode
用 VSCode 写代码的人不少,用 Vim/Neovim 的人也不少,但两边都想兼顾的人其实挺尴尬的。VSCode 的插件生态和调试体验确实好用,可 Vim 的键位操作一旦形成肌肉记忆,切到普通编辑器就像少了一只手。
以前我也试过 VSCodeVim 这类模拟插件,体验总差点意思,某些命令不支持,多光标的高级操作也经常出 bug。后来发现了 vscode-neovim 这个项目,它直接在 VSCode 里嵌了一个真正的 Neovim 实例。用了一年多,说说我的感受。

原理:不是模拟,是真家伙
vscode-neovim 的核心思路很简单粗暴:在后台启动一个完整的 Neovim 进程,VSCode 负责显示和交互,Neovim 负责处理所有的文本操作逻辑。
这意味着什么?意味着你在 VSCode 里用的 Vim 操作,和你在终端里用 Neovim 是完全一样的。不是"差不多",是完全一样。宏录制、寄存器操作、文本对象、自定义映射,全部原样支持。
插入模式交给 VSCode 自己处理,因为 VSCode 的补全、代码片段、LSP 提示这些功能本身就是强项。这样各取所长,不会互相拖后腿。
能做什么
先说基本操作。文件管理命令 :e、:q、:vsplit、:tabnext 这些都映射到了对应的 VSCode 命令。:w 保存也能正常用,不用再按 Ctrl+S。
自定义配置方面,支持 init.lua,大部分 Neovim 插件都能用。但要注意,有些插件会和 VSCode 冲突,比如代码高亮、LSP 补全这类,VSCode 自己已经做了,再装 Neovim 插件反而会出问题。官方建议是从空配置开始,按需添加。
快捷键体系分三层:Neovim 自带的键位、VSCode 的键位、以及透传给 Neovim 的键位。比如 gd 跳转定义、gh 显示悬浮文档,这些都走 VSCode 的原生功能。而 C-d、C-u 翻页这类纯编辑操作,直接交给 Neovim 处理。
多光标支持是一个亮点。在可视行模式和可视块模式下,用 mi 或 ma 可以在多行同时插入。这个功能我用得很多,改批量变量名、加注释之类的工作效率提升明显。
还有远程开发场景。vscode-neovim 作为 UI 扩展运行在本地,所以用 VSCode Remote 连接到服务器时,默认就能正常工作,不需要在远程环境额外装 Neovim。

实际使用中的坑
用了这么久,说几个实际遇到的问题。
第一,Neovim 版本要求 0.10.0 以上。低版本不是不能用,但可能会有一些奇怪的行为,官方建议是升级到最新稳定版。
第二,某些 Neovim 插件会导致视觉异常。比如那些做装饰渲染的插件(缩进线、括号高亮之类),VSCode 本身就有这些功能,Neovim 插件再做一遍就会出现重影。遇到渲染问题,先按 CTRL-L 强制重绘,不行就排查插件。
第三,滚动行为和纯 Neovim 略有不同。因为滚动是 VSCode 控制的,C-d/C-u 的滚动距离可能和你习惯的不太一样。
第四,dot-repeat(.重复操作)的逻辑有细微差异。在 Neovim 里,插入模式下移动光标会打断重复序列,在 VSCode 里不会。这个差异大部分时候感知不到,但偶尔会让人困惑。
为什么选它而不是 VSCodeVim
VSCodeVim 是纯模拟,不依赖 Neovim 进程。好处是轻量,坏处是永远追不上真正的 Neovim,很多高级功能要么不支持,要么行为不一致。
vscode-neovim 直接用 Neovim 的内核。Neovim 更新什么功能,它就自动支持什么功能。代价是内存占用会高一些,毕竟多跑了一个进程。但以现在的硬件条件,这点开销基本可以忽略。
安装和配置
安装很简单,VSCode 扩展商店搜 vscode-neovim 装上就行。前提是本机有 Neovim 0.10.0 或更高版本。
如果你想指定 Neovim 的路径,可以在扩展设置里改 vscode-neovim.neovimExecutablePaths。WSL 用户需要额外开启 useWSL 配置,并确保 wslpath 命令可用。
配置文件建议从空的 init.lua 开始,只添加你确定需要的配置。可以通过 vim.g.vscode 判断当前是否在 VSCode 环境中,从而条件性加载插件。
对于复合键位,比如用 jj 代替 Esc,可以通过 compositeKeys 配置:
{
"vscode-neovim.compositeKeys": {
"jj": {
"command": "vscode-neovim.escape"
}
}
}
写在最后
这个项目目前 Star 数 7600 多,不算特别高,但在 VSCode + Vim 这个细分领域里算是做得最好的方案了。项目维护活跃,issue 响应也快。
如果你是 Neovim 用户,又离不开 VSCode 的生态,这个扩展值得试。如果你从来没用过 Vim,那这个扩展对你没什么意义,VSCode 自带的键位已经够用了。
m 用户,又离不开 VSCode 的生态,这个扩展值得试。如果你从来没用过 Vim,那这个扩展对你没什么意义,VSCode 自带的键位已经够用了。
更多推荐
所有评论(0)