序言
在之前, 我曾考虑过使用VScode的快捷键来完全控制我的vscode,但是在代码页进行代码编辑的时候,还是需要鼠标来进行光标的移动。而心中一直对vim心存向往而又心生畏惧。受够了鼠标点来点去的低效与无聊,现在决定下决心摸索出一套完整的vim+vscode工作流。
第一章 基础的VIM安装与配置
在vscode中按照vim插件
直接在扩展商店中安装即可
第二章 常用的VIM命令
光标是vim进行编辑的核心
命令的格式
You use operators in combination with counts and motions to define the range of text to which an action applies:
what to do (delete, change...)
/
/ how many times
/ /
v v
{operator}{count}{motion}
^
/
/
where to perform
the action
For example, take d2w. It tells Vim to d elete 2 words. Try it!
start here
/
/
v
DO NOT ENTER!
移动光标cursor
1 基础按键
这个有点类似opencv中的坐标的定义方式,以向下向左为默认主方向,以向右向上为辅助方向
↑
← h j k l →
↓
| ↑
|← h j k l →
| ↓
* _ _ _ _ _ _
- Ctrl D and Ctrl U
在 Vim 中,Ctrl U和Ctrl D是用于滚动屏幕的快捷键,功能如下:
Ctrl U (向上滚动
- 默认情况下,
Ctrl U将屏幕向上滚动半页(即半屏)。 - 可以通过设置
scroll选项调整滚动行数,例如:set scroll=10会让每次滚动 10 行。 - 在插入模式下,
Ctrl U会删除从光标位置到行首的所有字符(需先按下Ctrl再按U)。
Ctrl D (向下滚动)
- 默认情况下,
Ctrl D将屏幕向下滚动半页(即半屏)。 - 同样可以通过
scroll选项调整滚动行数。 - 在插入模式下,
Ctrl D会触发自动缩进(需先按下Ctrl再按D)。
其他相关操作
Ctrl B和Ctrl F分别向上和向下滚动整页。Ctrl E和Ctrl Y分别向下和向上滚动一行,而不移动光标。
配置滚动行为
可以通过以下命令修改默认滚动行数:
vim
" 设置半屏滚动行数为 10
set scroll=10
编辑
按i可以进行插入模式,可以将光标从一个方块转为一个竖线,表明是一个可以编辑的模式。
增删改查
- 删
dw删除一个word,d2w删除2个word
Mini-refresher: The d command
d{motion} - delete text covered by motion
- d2w => deletes two words
- dt; => delete until ;
- d/hello => delete until hello
dd - delete line
D - delete from cursor until the end of the line
undo与redo, 撤销与重做
u撤销上一步ctrl+r重做
选中、复制、剪贴、粘贴
第三章 完全接管--VScode快捷键与VIM快捷键的相互配合
- 打开文件浏览器(Explorer View)
- 打开终端
- 转到函数定义
- 打开函数定义
第四章 vscode
vscode的配置文件系统
VSCode 中有多个 JSON 文件用于用户配置,以下是常见的需要用户手动配置的文件:
-
settings.json
存储用户或工作区的个性化设置,路径通常位于:
用户全局配置:
%APPDATA%\Code\User\settings.json(Windows)或~/.config/Code/User/settings.json(Linux/macOS)。工作区配置:项目根目录下的
.vscode/settings.json。 -
keybindings.json
自定义快捷键绑定,路径与 settings.json 同级(User 目录下)。支持覆盖默认快捷键或添加新绑定。
-
tasks.json
定义自定义任务(如编译、测试等),位于项目根目录的 .vscode 文件夹中。常用于配置构建流程或脚本执行。
-
launch.json
调试配置,存储调试环境的参数(如启动参数、环境变量等),路径为
.vscode/launch.json。 -
extensions.json
推荐扩展列表,通常由 VSCode 自动生成,但用户可手动编辑以共享扩展配置。位于
.vscode/extensions.json。 -
snippets/*.json
自定义代码片段,路径为 User/snippets/ 目录下的语言特定文件(如 javascript.json)。
-
profile/*.json
(可选)如果使用 Profiles 功能,每个 Profile 会有独立的配置文件夹,包含上述文件的副本。
注意事项
除 settings.json 和 keybindings.json 外,其他文件通常需要手动创建。
工作区配置(.vscode/ 下的文件)会覆盖用户全局配置。
部分配置可通过 VSCode 的 GUI 界面修改,无需直接编辑 JSON 文件。
vscode所有的配置文件
VSCode 的配置文件分为全局配置、工作区配置、语言特定配置等,通常以 JSON 格式存储。以下是常见的配置文件列表:
全局配置文件
settings.json:存储用户全局设置,路径如下:- Windows:
%APPDATA%\Code\User\settings.json - macOS:
$HOME/Library/Application Support/Code/User/settings.json - Linux:
$HOME/.config/Code/User/settings.json
- Windows:
工作区配置文件
.vscode/settings.json:覆盖全局设置,仅对当前项目生效。.vscode/tasks.json:定义自定义任务(如构建、测试等)。.vscode/launch.json:配置调试环境(如启动参数、调试器类型)。.vscode/extensions.json:推荐项目所需的扩展(团队共享)。
语言特定配置
- 语言模式设置:通过
[language].json格式(如python.json)覆盖特定语言的设置。 - 代码片段文件:
<language>.json(如javascript.json),路径与settings.json相同。
其他配置文件
keybindings.json:自定义快捷键,路径与settings.json相同。snippets/*.json:用户代码片段文件,存放于User/snippets目录。.vscodeignore:排除文件(扩展开发时使用)。
** 配置文件优先级规则 **
- 工作区配置(
.vscode/下的文件)优先于全局配置。 - 语言特定配置优先于通用配置。
- 调试和任务配置仅在工作区中生效。
工作区(workspace)与文件夹(Folder)的区别
工作区 是Vscode中的高级概念,允许将多个文件夹组合为一个逻辑单元,适合管理多项目或复杂代码结构。工作区文件(.code-workspace)保存配置、调试设置和扩展推荐,适用于团队协作或跨项目配置共享。
文件夹 是直接打开单个目录的基本方式,配置(如.vscode/settings.json)仅作用于当前文件夹。适合简单项目或快速编辑独立文件。
核心差异点
配置作用范围
工作区配置覆盖所有包含的文件夹,优先级高于全局设置但低于文件夹级设置。文件夹级配置仅影响自身目录。
文件结构管理
工作区支持添加多个根文件夹(通过Add Folder to Workspace),每个文件夹保持独立路径。单一文件夹打开时仅显示该目录内容。
扩展与调试
工作区可定义推荐扩展列表(extensions.json),调试配置(launch.json)对所有子文件夹生效。文件夹模式下扩展和调试配置需单独设置。
典型使用场景
选择工作区
- 前端项目需要同时管理
frontend和backend目录 - 微服务架构下协调多个服务代码
- 需要统一团队开发环境配置
选择文件夹
- 快速编辑单个脚本或文档
- 临时查看第三方库源码
- 无需复杂配置的简单项目
操作示例
创建工作区
- 通过
File > Save Workspace As生成.code-workspace文件 - 右键资源管理器选择
Add Folder to Workspace添加新目录
或者通过安装拓展Workspace Sidebar来实现
切换模式
- 关闭工作区时会提示保存更改
- 通过
File > Open Folder可切换回单文件夹模式
工作区提供更灵活的工程管理能力,而文件夹模式则追求轻量简洁。根据项目复杂度选择合适方式能显著提升开发效率。
只有修改后的setting才会出现在用户的目录下
核心联系和工作原理
VS Code 的设置遵循一个清晰的继承和覆盖 机制,并且 UI 编辑器与 JSON 文件是互通的。
- 设置的层次结构
VS Code 在应用设置时,会按照以下顺序查找和应用配置,靠后的会覆盖靠前的 :
a. 默认设置 (Default Settings.json) :这是 VS Code 内部自带的、只读 的默认值。如果用户没有做任何配置,就会使用这一层的设置。
b. 用户设置 (User Settings.json) :这是您在全局级别(对所有项目生效)所做的修改。
c. 工作区设置 (Workspace Settings.json) :这是针对当前项目文件夹(./.vscode/settings.json)所做的修改,它会覆盖用户设置。
d. 语言特定设置 (Language-specific Settings) :针对某种语言(如@lang:python),可以覆盖前面所有层次的设置。
UI 编辑器和 JSON 文件的关系
- UI 编辑器是 JSON 文件的图形界面 :
- 当您通过 UI 编辑器修改一个设置并保存时,VS Code 实际上是将这个修改项写入到您的用户或工作区
settings.json文件中。 - UI 只是一个更友好的查看和修改工具,它和 JSON 文件修改的效果是完全一样的。
- 当您通过 UI 编辑器修改一个设置并保存时,VS Code 实际上是将这个修改项写入到您的用户或工作区
- "只有修改了才出现" 是正确的
- 默认值不会出现在您的
settings.json中 :您的settings.json文件(无论是用户级还是工作区级)只会 包含您已经修改过的配置项。 - 读取机制 :当 VS Code 启动时,它首先读取所有默认设置。然后,它会检查您的
settings.json文件。如果某个设置项在settings.json中存在,它就使用这个新值;如果不存在,它就继续使用默认设置中的值。
示例:
假设 editor.fontSize 的默认值是 14。
| 情况 | settings.json 中的内容 |
VS Code 实际使用的值 |
|---|---|---|
| 未修改 | {} (空文件) |
14 (来自默认设置) |
| 已修改 | "editor.fontSize": 16 |
16 (来自我们的设置文件,覆盖了默认值) |
这就是为什么我们的 settings.json 文件通常只包含几十行内容,而默认设置文件(可以通过命令面板 Preferences: Open Default Settings (JSON) 查看)却包含数千行配置项。
附录
超级无敌vscode的setting.json配置
json
"vim.leader": "<space>", // 设置空格键为 Leader 键
"vim.normalModeKeyBindingsNonRecursive": [
// --- 核心面板切换 ( Leader + 字母) ---
{
"before": ["<leader>", "e"],
"commands": ["workbench.view.explorer"] // 切换到资源管理器
},
{
"before": ["<leader>", "f"],
"commands": ["workbench.view.search"] // 切换到搜索面板
},
{
"before": ["<leader>", "g"],
"commands": ["workbench.view.scm"] // 切换到 Git 面板
},
{
"before": ["<leader>", "t"],
"commands": ["workbench.action.terminal.toggleTerminal"] // 切换终端
},
// --- 快速打开文件 ( Leader + o) ---
{
"before": ["<leader>", "o"],
"commands": ["workbench.action.quickOpen"] // 快速打开文件 (Ctrl+P)
},
// --- 窗口和编辑器切换 (类似 Vim 的 <C-w> 切换) ---
{
"before": ["<C-h>"],
"commands": ["workbench.action.nextEditor"]
},
{
"before": ["<C-l>"],
"commands": ["workbench.action.previousEditor"]
},
],
// 确保 ESC 键可以从 VS Code 的某些输入框退出,而不仅仅是退出 Vim 模式
"keyboard.bindings": [
{
"key": "escape",
"command": "workbench.action.closeQuickOpen",
"when": "inQuickOpen"
},
{
"key": "escape",
"command": "workbench.view.explorer",
"when": "explorerFocus"
}
]
编订日期
2025-11-21 建立文档和大纲