VSCode 中 Vim 模式需手动配置才能正常工作:启用插件后须设 vim.useCtrlKeys 和 vim.useSystemClipboard 为 true,编辑 keybindings.json 实现 jj 退出插入模式,并按语言禁用非必要场景的 Vim 模式。
VSCode 里 Vim 模式不是装完插件就自动“开箱即用”的,
默认行为偏保守,很多关键映射(比如
跨行滚动、
退出插入模式)都得手动开;不配置好,按
没反应、
不动、
粘不出内容,全是正常现象。
安装后没反应?先确认插件真激活了
常见错误现象:装完
,打开文件按
,状态栏没出现
,
也不动。
检查扩展面板里
是否显示「已启用」,不是「已安装但未启用」
必须打开一个真实文件(比如
),不能是空标签页或设置页——焦点要落在编辑器内
重启 VSCode 或执行
,某些旧版本或远程开发环境需要重载才加载 Vim 状态机
禁用其他键位类插件:
、
会劫持
等核心组合,导致 Vim 模式初始化失败
基础移动和粘贴失效?改这两个设置最要紧
和
是影响体验的两个开关,不设它们,
不滚动、
和系统剪贴板不通。
设为
:让
、
等在 Normal 模式下真正生效(否则被 VSCode 原生快捷键吞掉)
设为
:否则
复制的内容无法用
粘到浏览器/终端,外部复制的内容也
不出来
别只改 UI 设置界面——有些配置项(如
)必须进
手动加,例如:
,不然 Ctrl 键仍被拦截
想用
代替
?直接写进 keybindings.json
这是高频自定义需求,但不能靠 UI 设置完成,必须编辑快捷键 JSON 文件,且条件判断要写准,否则在非 Vim 场景下误触发。
VSCode 1.118
微软正式发布 Visual Studio Code 1.118 版本 。本次更新重点强化了 AI 开发体验与企业管理能力,其中最引人注目的是新增 Copilot CLI 远程控制功能,允许开发者通过手机或网页远程监控和接管 AI 会话 。同时,为了提高 AI 的运行性价比,新版本优化了令牌缓存策略以降低成本 。此外,1.118 版还引入了 Chronicle 本地历史追踪、TypeScript 7.0 支持以及更严格的企业级访问管控 。
下载
执行
在数组里加这段(注意逗号分隔):
别漏掉
条件:
保证只在插入模式下生效,避免在 Normal 模式下按
意外退出
保存即生效,不用重启;如果无效,检查控制台是否有
,说明插件根本没加载
哪些文件不该开 Vim 模式?按语言粒度关
全局启用 Vim 模式后,编辑
、
或设置页时,
删整行、
改引号内容容易误操作,反而拖慢节奏。
进
,加 language-specific 配置:
是语言级开关,比全局
优先级高
注意:只有已注册的语言标识符才有效,比如
、
,不能写成
或
真正卡住人的从来不是怎么配,而是配完发现
进不了可视块模式——那大概率是某个语言扩展(比如 Prettier、ESLint 插件)把
绑定成格式化命令了,得去
里搜
,把冲突项的
改成
或删掉。
vscodevimCtrl+kjjEschjklpvscodevimEsc-- NORMAL --hjklvscodevim.vimindex.jsDeveloper: Reload WindowEmacs KeymapSublime Text KeymapCtrl+Shift+Pvim.useCtrlKeysvim.useSystemClipboardCtrl+k/jy/pvim.useCtrlKeystrueCtrl+kCtrl+jvim.useSystemClipboardtrueyyCtrl+Vpvim.handleKeyssettings.json"vim.handleKeys": { "": false, "": false } jjEscPreferences: Open Keyboard Shortcuts (JSON){ "key": "j j", "command": "extension.vim_escape", "when": "editorTextFocus && vim.mode == 'InsertMode'" }whenvim.mode == 'InsertMode'jjReferenceError: vimState is not defined.json.mdddci"settings.json"vim.enableNeovim": false,
"[json]": { "vim.enable": false },
"[markdown]": { "vim.enable": false },
"[typescript]": { "vim.enable": true },
"[python]": { "vim.enable": true }vim.enablevim.enable[javascript][typescript][js][ts]Ctrl+vCtrl+vkeybindings.jsonctrl+vwhenfalse