装完插件不等于 vim 模式开启,必须手动启用插件、打开真实文件、确认状态栏显示 -- normal --,并配置 vim.usesystemclipboard 和 vim.usectrlkeys 才能正常使用 y/p/ctrl+j 等功能。

装完插件不等于 Vim 模式就开了——VSCode 默认不会自动激活 vim.mode,必须手动触发或配置生效条件,否则 Esc 按了没反应、hjkl 会直接输字符。
插件装完按 Esc 没反应?先确认是否真激活了 vim.mode
VSCode 的 Vim 插件(vscodevim.vim)安装后默认「安装但未启用」,或者只在特定条件下才接管编辑器输入流。
- 打开扩展面板(
Ctrl+Shift+X),搜vim,确认vscodevim.vim状态是「已启用」,不是灰色的「已安装」 - 不能在空标签页、设置页、输出面板里测试——必须打开一个真实文件(如
index.js或main.py),且焦点落在编辑器内容区 - 按
Esc后看状态栏左下角:出现-- NORMAL --才算成功;若仍是-- INSERT --或无任何提示,说明模式根本没起来 - 重启 VSCode 或执行
Developer: Reload Window(Ctrl+Shift+P输入后回车),某些远程开发环境或旧版本需重载才能加载 Vim 状态机 - 禁用其他键盘映射插件(如
Emacs Keymap、Sublime Text Keymap),它们会劫持Ctrl+Shift+P等关键组合,导致 Vim 初始化失败
为什么 y 复制不了、p 粘不出?缺这两个配置项
vim.useSystemClipboard 和 vim.useCtrlKeys 是影响基础体验的两个开关,不设它们,Vim 操作就卡在“半残”状态。
-
"vim.useSystemClipboard": true:让y/yy写入系统剪贴板,外部复制的内容也能用p粘进来;默认为false,此时y只存进 Vim 内部寄存器 -
"vim.useCtrlKeys": true:启用Ctrl+k(上滚)、Ctrl+j(下滚)、Ctrl+o(跳转回退)等原生 Vim 快捷键;默认关闭,这些组合会被 VSCode 原生逻辑吞掉 - 这两项必须写进
settings.json(不是 GUI 设置界面),路径:Ctrl+, → 右上角 {};只改 UI 设置无效 - 顺手加一句
"vim.handleKeys": { "<c-k>": false, "<c-j>": false }</c-j></c-k>,防止 VSCode 把Ctrl+k当作「删除行」快捷键抢走控制权
只想对 .js/.py 文件开 Vim,JSON/MD 保持原生?按语言配置就行
全局开启 Vim 模式容易误操作:在 .json 里按 dd 删整行,或在 .md 里按 i 却跳进插入模式,反而打断写作流。
- 在
settings.json中关闭全局模式:"vim.enable": false - 然后为具体语言 ID 单独启用,语法必须严格:
"[javascript]": { "vim.enable": true },<br>"[typescript]": { "vim.enable": true },<br>"[python]": { "vim.enable": true } - 语言 ID 必须小写,且和 VSCode 内部识别一致;不确定时,用
Ctrl+Shift+P → Developer: Inspect Editor Tokens and Scopes查当前文件的语言 ID -
.json、.md、.gitignore等文件不会响应hjkl,完全保留原生快捷键,避免误操作
i 和 I 的区别被很多人搞反了
这不是 bug,是设计如此:i 是“在光标前插入”,I 才是“跳到行首非空格处插入”。混淆这点会导致反复按 i 却卡在奇怪位置。
-
i:光标在哪,就在哪左边开始输入(等价于原生 Vim 的i) -
I:先移动到当前行第一个非空白字符前,再进入插入模式(等价于原生 Vim 的I) - 想快速进插入模式并从行首开始?别连按
i,直接按I - 同理:
a是光标后插入,A是行尾插入;c类命令也遵循这套大小写逻辑(如ci"vsca")
最常被忽略的是:Vim 模式只作用于编辑器主区域。文件树、调试变量面板、终端、Git 提交窗口……这些地方 hjkl 全都不响应,得切回鼠标或 VSCode 原生快捷键。别指望一套键位走天下,认清边界比硬调配置更重要。











