VSCode Vim插件需打开真实文件并进入Normal模式才生效,右下角显示--NORMAL--;禁用冲突插件、删除Esc默认绑定、启用系统剪贴板及正确配置keybindings是关键。

装完插件不生效,大概率不是配置写错了,而是 VSCode 没进 Vim 的“工作状态”——它只在编辑器主区域、打开真实文件、且处于正确模式时才响应 hjkl、Esc、: 这些键。
确认 Vim 插件已真正激活并进入 Normal 模式
VSCode 不会自动把空标签页或设置页当作 Vim 编辑区,很多“按 Esc 没反应”的问题根源在此。
- 必须打开一个真实文件(如
index.js或README.md),光标要落在编辑器内容区内 - 看右下角状态栏是否显示
-- NORMAL --;没出现就说明还没进入 Vim 模式 - 检查扩展面板里
vscodevim.vim是否是「已启用」而非仅「已安装」 - 禁用所有其他键盘类插件(
Emacs Keymap、Sublime Text Keymap等),它们会劫持按键事件 - 重启 VSCode 或执行
Developer: Reload Window,某些远程开发环境或旧版本需重载才加载 Vim 状态机
让 Esc 和 jj 正常退出插入模式
Esc 被 VSCode 原生命令(比如呼出命令面板、切换终端)劫持是默认行为,不是插件故障。
- 打开快捷键设置:
Ctrl+K Ctrl+S(Windows/Linux)或Cmd+K Cmd+S(macOS) - 搜索
escape,找到绑定到workbench.action.showCommands或workbench.action.terminal.toggleTerminal的条目,右键「删除键绑定」 - 在
settings.json中确保"vim.useCtrlKeys": true,否则Ctrl+w切窗、Ctrl+v块选等基础组合键也不生效 - 若仍想用双键退出,加这条到
settings.json:"vim.insertModeKeyBindings": [<br> { "before": ["j", "j"], "after": ["<esc>"] }<br>]</esc>
复制粘贴与系统剪贴板打通
默认 y 只存进 Vim 内部寄存器,p 也只粘内部内容——这和你在终端/浏览器里复制的完全隔离。
- 必须在
settings.json中设"vim.useSystemClipboard": true,否则yy后Ctrl+V粘不出,外部复制的内容也p不进来 - 如果
Ctrl+C/Ctrl+V在 Normal 模式下被拦截,要在"vim.handleKeys"里放行:"vim.handleKeys": {<br> "<c-c>": false,<br> "<c-v>": false,<br> "<c-s>": false<br>}</c-s></c-v></c-c> - 想在 Normal 模式下用
Ctrl+C复制当前行?补一条自定义快捷键:{<br> "key": "ctrl+c",<br> "command": "editor.action.clipboardCopyAction",<br> "when": "editorTextFocus && vim.mode == 'Normal'"<br>}
复用原有 .vimrc 映射的现实路径
VSCode Vim 插件根本不读 .vimrc,nnoremap j gj 这类语句不会自动生效——这不是 bug,是设计如此。
- 要用
vim.normalModeKeyBindingsNonRecursive手动转义,例如:"vim.normalModeKeyBindingsNonRecursive": [<br> { "before": ["j"], "commands": ["editor.action.moveLinesDownAction"] },<br> { "before": [" "], "commands": ["extension.vim_noHighlight"] }<br>] - 键名必须用 VSCode 的标识符:
"j"可以,"不行,得写成" "ctrl+p" -
leader键别用\:中文输入法和 macOS Spotlight 容易吞掉它;改用"vim.leader": " "更稳 - 别碰
vim.vimrc.enable:它只读极少数选项(如set number),还常和 VSCode 设置冲突,导致行号忽隐忽现
最常被忽略的一点:你习惯的 :w !python3 或 :Telescope 在 VSCode 里永远报错 E492: Not an editor command——因为插件只是按键模拟层,不运行 nvim 进程,也不加载任何 Vimscript。接受这个边界,才能少踩一半坑。











