VSCodeVim:在 VS Code 里用 Vim 编辑

📅 2026/6/25 19:58:15
VSCodeVim:在 VS Code 里用 Vim 编辑
文章目录VSCodeVim在 VS Code 里用 Vim 编辑VSCodeVim在 VS Code 里用 Vim 编辑VSCodeVim 是一个 VS Code 扩展把 Vim 的编辑方式带进了 VS Code。项目在 GitHub 上拿到了 15,000 的 Star。很多人习惯 Vim 的操作方式hjkl 移动光标、dd 删除行、yy 复制行这些快捷键用久了就变成了肌肉记忆。但写代码又离不开 VS Code 的插件生态和调试功能。VSCodeVim 解决的就是这个问题在 VS Code 里还原 Vim 的编辑体验。支持的模式VSCodeVim 支持 Vim 的主要编辑模式Normal 模式浏览和操作文本Insert 模式输入文字Visual / VisualLine / VisualBlock 模式选择文本Replace 模式替换字符OperatorPending 模式等待操作符的第二个按键EasyMotion 模式快速跳转切换方式和 Vim 一致Insert 模式按 Esc 回到 NormalNormal 模式按 i 进入 Insert。按键重映射VSCodeVim 允许自定义按键绑定。可以在 VS Code 的 settings.json 里配置支持四种模式的绑定vim.insertModeKeyBindings 用于 Insert 模式vim.normalModeKeyBindings 用于 Normal 模式vim.visualModeKeyBindings 用于 Visual 模式vim.operatorPendingModeKeyBindings 用于 OperatorPending 模式。比如把 jj 映射为 Escvim.insertModeKeyBindings: [ { before: [j, j], after: [Esc] } ]每个绑定可以设置 before按键序列、after映射目标、commands执行的 VS Code 命令、silent是否静默。还有 NonRecursive 版本的绑定避免递归映射导致死循环。比如交换 j 和 k 的方向vim.normalModeKeyBindingsNonRecursive: [ { before: [j], after: [k] }, { before: [k], after: [j] } ]对于 Altkey 或 CtrlShiftkey 这类组合键需要在 VS Code 的 keybindings.json 里配置。Neovim 集成VSCodeVim 可以接入 Neovim使用 Neovim 的 Ex 命令。需要先安装 Neovim然后在设置里开启 vim.enableNeovim并指定 Neovim 的路径。开启后可以用 Neovim 的 :normal 命令、g 命令以及更快的搜索替换。模拟插件VSCodeVim 内置了多个常用 Vim 插件的模拟实现vim-surround处理包围字符比如引号、括号、XML 标签。cs’ 把双引号换成单引号ds 删除引号ysiw) 给当前单词加括号。vim-commentary注释切换。gc 切换行注释gC 切换块注释。gcc 注释当前行gc2j 注释当前行和下面两行。vim-easymotion快速跳转。开启后按 leader leader w 会在所有单词起始位置显示标记按对应字母跳转过去。leader leader f 加字符可以向前查找字符并跳转。vim-sneak双字符跳转。s 加两个字符向前跳到第一个匹配位置S 向后跳。vim-indent-object把相同缩进层级的代码块作为文本对象。在 Python 这类不用大括号的语言里比较实用ai 选中当前缩进块加上面一行ii 选中当前缩进块。CamelCaseMotion按驼峰命名和下划线分隔的单词移动。vim-airline根据当前模式改变状态栏颜色。Normal 模式一种颜色Insert 模式另一种方便区分。ReplaceWithRegister用寄存器内容替换文本不改变寄存器。vim-textobj-entire把整个文档作为文本对象dae 删除整个文档内容。vim-textobj-arguments把函数参数作为文本对象cia 修改当前参数daa 删除当前参数包括逗号。多光标VSCodeVim 支持多光标编辑。在 Windows 上按 CtrlD 添加下一个匹配项的光标或者用 gb 快捷键。每个光标有独立的剪贴板。在多光标 Visual 模式按 Esc 回到多光标 Normal 模式再按一次回到普通 Normal 模式。Vimrc 支持可以加载 .vimrc 配置文件。设置 vim.vimrc.enable 为 true配置 vim.vimrc.path 指向 .vimrc 文件路径。目前只支持 remap还在实验阶段。一些设置vim.useSystemClipboard设为 true 时Vim 的默认寄存器使用系统剪贴板复制的内容可以直接粘贴到其他应用。vim.handleKeys可以把某些按键交回 VS Code 处理。比如不想让 CtrlF 被 Vim 接管设为 { “”: false }。vim.leader定义 leader 键默认是反斜杠可以改成空格或其他键。vim.hlsearch设为 true 时高亮所有搜索匹配项。vim.incsearch输入搜索模式时实时显示下一个匹配。vim.inccommand输入替换命令时实时预览替换效果。性能优化可以在 settings.json 里添加extensions.experimental.affinity: { vscodevim.vim: 1 }这会提升 VSCodeVim 的运行性能。Mac 用户注意Mac 上需要在终端执行一条命令启用按键重复否则某些 Vim 操作会不正常defaults write com.microsoft.VSCode ApplePressAndHoldEnabled -bool false执行后注销重新登录再重启 VS Code。同时建议在系统设置里调高键盘的按键重复速度和延迟时间。调试按键映射如果自定义的按键映射不生效可以把扩展的日志级别调到 Debug查看 Output 面板里 Vim 的输出。日志会显示每个按键的处理过程配置错误的映射会被忽略并记录。ode。同时建议在系统设置里调高键盘的按键重复速度和延迟时间。调试按键映射如果自定义的按键映射不生效可以把扩展的日志级别调到 Debug查看 Output 面板里 Vim 的输出。日志会显示每个按键的处理过程配置错误的映射会被忽略并记录。