10 个 VS Code Vim 技巧助您提高工作效率
学习 Vim 是任何有抱负的软件工程师提高工作效率的最佳方法之一。过去几年,我一直在使用 Visual Studio Code 中的 VSCodeVim扩展,这个“VS Code × Vim”组合极大地提高了我的编码速度。
在本文中,我将分享十个 VS Code Vim 技巧,以进一步提高您的工作效率,让您能够以闪电般的速度编写代码⚡。
先决条件:
- 你已经安装了VSCodeVim 扩展
- 您对 Vim 键绑定有基本的了解(例如,您应该知道
5j
,yy
的含义)
目录
- 导航
- 按键绑定
- 猛拉
(完整设置:settings.json
| keybindings.json
)
导航
#1 - 智能亲属线
这个很酷的功能仅在插入模式下显示绝对行号,否则显示相对行号。
在下面的演示中,请注意左侧的行号边栏仅在插入模式下显示绝对数字👇
(💡 如果 GIF 没有播放,请点击它)

要启用它,请settings.json
按“Ctrl+Shift+P”打开并搜索“首选项:打开用户设置(JSON)”。然后,添加以下项目:
{
"vim.smartRelativeLine": true
}
#2 - 光标周围的行
当滚动浏览一个大文件时,光标可能会位于屏幕的最顶部/最底部,这可能会很烦人,因此您不确定光标之前/之后有哪些行。
“编辑器:光标周围行数”设置光标上方和下方保留的最小行数。例如,将其设置为8
表示光标上方始终保留 ≥8 行,光标下方始终保留 ≥8 行。在 Vim 中,也称为scrolloff
。
将以下项目添加到settings.json
:
{
"editor.cursorSurroundingLines": 8
}
#3 - 单词分隔符
如果您经常使用 CSS 类名(例如Tailwind CSS),您可能会发现 Vim 将kebab-case
类名分解为多个单词很烦人。
例如,我需要按5 次e
“跳到单词末尾”才能选中这个单词,因为编辑器会把这个符号当作单词分隔符。虽然我当然可以用“跳到单词末尾,忽略标点符号”来做同样的事情,但我喜欢用快捷键来跳到下一个单词(别评判我😥),而且我想要一个更快捷的方法来实现这一点。border-red-600
-
E
e
(💡 再次强调,如果 GIF 没有播放,请点击它)

“编辑器:单词分隔符”设置控制使用哪些字符作为单词分隔符,-
默认情况下使用 字符。settings.json
如果我在 中删除该-
字符:

然后,编辑器将其视为border-red-100
一个单词,我只需按e
一次即可选择它!

(🔼 目录)
按键绑定
#4 - 无需箭头键即可浏览菜单
VSCodeVim 扩展有几个内置的键绑定,让您无需使用箭头键即可导航不同的菜单和列表。
如果您处于自动完成菜单中:
- Ctrl + J - 移至下一个项目
- Ctrl + P - 移动到上一个项目

和<C-j>
组合<C-p>
在“转到文件”菜单(即“Ctrl + P”菜单)中也有效:

如果您将文件资源管理器窗口置于焦点位置(例如,通过单击文件资源管理器窗口),则可以通过以下方式导航项目:
j
和k
- 向下和向上移动h
- 移动到父文件夹o
- 打开文件或文件夹

我们很快会在技巧 #7中研究更多自定义文件资源管理器键绑定。
#5 - LSP 键绑定
LSP(语言服务器协议)键绑定利用语言服务器让您快速浏览代码,例如跳转到变量/函数定义并找到其用法。
我所有的 LSP 快捷键都以g
(表示“ g o”)开头,后跟操作的首字母。有些以 开头gp
,表示“ g o p eek”。
(图例:🔥 = 最常用)
gd
- 转到D定义 (🔥)gpd
- P eek定义gh
- 显示H over (🔥)gi
- 转到实现(🔥)gpi
- P eek实现gq
-快速修复(打开代码操作灯泡菜单)gr
- 转到R参考文献 (🔥)gt
- 转到类型定义(🔥)gpt
- Peek类型定义
settings.json
它们可以在以下位置设置vim.normalModeKeyBindings
:
{
"vim.normalModeKeyBindings": [
{
"before": ["g", "p", "d"],
"commands": ["editor.action.peekDefinition"]
},
{
"before": ["g", "h"],
"commands": ["editor.action.showDefinitionPreviewHover"]
},
{
"before": ["g", "i"],
"commands": ["editor.action.goToImplementation"]
},
{
"before": ["g", "p", "i"],
"commands": ["editor.action.peekImplementation"]
},
{
"before": ["g", "q"],
"commands": ["editor.action.quickFix"]
},
{
"before": ["g", "r"],
"commands": ["editor.action.referenceSearch.trigger"]
},
{
"before": ["g", "t"],
"commands": ["editor.action.goToTypeDefinition"]
},
{
"before": ["g", "p", "t"],
"commands": ["editor.action.peekTypeDefinition"]
}
]
}
(注意:(gd
转到定义)键绑定是内置的,因此无需在上面重新指定。)
#6 - 滚动显示悬停
从 VS Code v1.77开始,可以使用键盘快捷键在悬停窗口(通过 打开)中滚动。通过一些技巧,我们可以使用、、、键在悬停窗口中滚动。gh
h
j
k
l

确保我们已经重新映射gh
(settings.json
这应该已经在技巧 #5中完成):
{
"vim.normalModeKeyBindings": [
// ...
{
"before": ["g", "h"],
"commands": ["editor.action.showDefinitionPreviewHover"]
}
]
}
接下来keybindings.json
通过“Ctrl + Shift + P”→“偏好设置:打开键盘快捷键(JSON)”打开,并附加以下项目:
[
{
"key": "h",
"command": "editor.action.scrollLeftHover",
"when": "editorHoverFocused"
},
{
"key": "j",
"command": "editor.action.scrollDownHover",
"when": "editorHoverFocused"
},
{
"key": "k",
"command": "editor.action.scrollUpHover",
"when": "editorHoverFocused"
},
{
"key": "l",
"command": "editor.action.scrollRightHover",
"when": "editorHoverFocused"
}
]
(感谢 EdRW 提供此 hack)
#7 - 文件资源管理器键绑定
虽然 VSCodeVim 扩展附带了几个内置的文件资源管理器键绑定(如技巧 4 所示),但我们可以添加自定义键绑定来丰富体验:
<leader>e
- 切换(并聚焦)文件资源管理器视图- 💡
<leader>
代表Leader Key,通常用作用户自定义快捷键的前缀。默认情况下,它是反斜杠键 (\
),但我们通常将其映射到空格键(参见vim.leader
下方选项)。
- 💡
- 在文件资源管理器中:
a
- 新文件f
- 新建文件夹r
- 重命名项目x
- 切割物品y
- 复制项目p
- 粘贴项目
要设置自定义键绑定:
- 打开
settings.json
并添加<leader>e
键绑定以打开文件资源管理器:
{
"vim.leader": "<space>",
"vim.normalModeKeyBindings": [
// ...
{
"before": ["<leader>", "e"],
"commands": ["workbench.view.explorer"]
}
]
}
- 通过“Ctrl + Shift + P”→“偏好设置:打开键盘快捷键(JSON)”打开
keybindings.json
,并附加以下项目:
[
{
"key": "space e",
"command": "workbench.action.toggleSidebarVisibility",
"when": "filesExplorerFocus && !inputFocus"
},
{
"key": "a",
"command": "explorer.newFile",
"when": "explorerViewletVisible && filesExplorerFocus && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
{
"key": "f",
"command": "explorer.newFolder",
"when": "explorerViewletVisible && filesExplorerFocus && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
{
"key": "r",
"command": "renameFile",
"when": "explorerViewletVisible && filesExplorerFocus && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
{
"key": "x",
"command": "filesExplorer.cut",
"when": "explorerViewletVisible && filesExplorerFocus && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
{
"key": "y",
"command": "filesExplorer.copy",
"when": "explorerViewletVisible && filesExplorerFocus && !explorerResourceIsRoot && !inputFocus"
},
{
"key": "p",
"command": "filesExplorer.paste",
"when": "explorerViewletVisible && filesExplorerFocus && !explorerResourceReadonly && !inputFocus"
}
]
第一项可以<leader>e
在文件资源管理器获得焦点时关闭它,其余项是用于操作项目的键绑定。
演示:
- 使用以下方式打开文件资源管理器
<leader>e
→ 使用以下方式新建文件夹f
→ 使用以下方式新建文件a
- 使用以下方式打开文件资源管理器
<leader>e
→ 使用以下方式剪切文件x
→ 使用以下方式粘贴文件p
(感谢 v-iashin提供此 hack)
#8 - 将 Caps Lock 映射到 Esc
虽然 Esc 键对于 Vim 来说非常重要,但我讨厌所有键盘都把它放在左上角,这让你的手在主行时很难够到它。我强烈建议将Caps Lock键重新映射到Esc 键,因为 Caps Lock 键很少使用,而且很容易用小指按到。
将 Caps Lock 重新映射到 Esc 键也消除了插入模式下常见的按键绑定,即jj
按 或jk
退出插入模式。这样,当您在插入模式下输入时,编辑器就不会再尴尬地暂停,j
等待您完成jj
按键绑定了。
执行重新映射需要第三方实用程序:
- Windows - PowerToys 键盘管理器
- MacOS -登山扣元素
- Linux -输入重映射器
(🔼 目录)
猛拉
#9 - 突出显示被复制的文本
你可以在提取文本时启用高亮功能,这是一个很好的视觉提示,可以显示你提取了哪些文本。除了高亮时长外,你还可以设置与配色方案匹配的高亮颜色。例如,我使用了绿色的高亮颜色:
在settings.json
:
{
"vim.highlightedyank.enable": true,
"vim.highlightedyank.color": "#a9dc7660",
"vim.highlightedyank.duration": 250
}
#10 - 拉至系统剪贴板
您可以使用系统剪贴板寄存器 ( *
) 作为默认寄存器。换句话说,诸如yy
或 之类的键绑定dd
会将文本提取到系统剪贴板。在 中settings.json
:
{
"vim.useSystemClipboard": true
}
(🔼 目录)
最后,同样重要的是,我强烈建议你查看VSCodeVim 扩展的README 文件。你肯定会学到一些本文未涉及的新知识 😁。
完整的设置代码如下:
感谢阅读!如果你也有一些 VS Code Vim 的小技巧,欢迎在评论区分享🙌。
文章来源:https://dev.to/ansonh/10-vs-code-vim-tricks-to-boost-your-productivity-1b0n