使用vim来完全控制你的VSCode(一)

序言

在之前, 我曾考虑过使用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 →         
    |    ↓
    *  _ _ _ _ _ _
  1. Ctrl D and Ctrl U
    在 Vim 中,Ctrl UCtrl D 是用于滚动屏幕的快捷键,功能如下:
    Ctrl U (向上滚动
  • 默认情况下,Ctrl U 将屏幕向上滚动半页(即半屏)。
  • 可以通过设置 scroll 选项调整滚动行数,例如 :set scroll=10 会让每次滚动 10 行。
  • 在插入模式下,Ctrl U 会删除从光标位置到行首的所有字符(需先按下 Ctrl 再按 U)。

Ctrl D (向下滚动)

  • 默认情况下,Ctrl D 将屏幕向下滚动半页(即半屏)。
  • 同样可以通过 scroll 选项调整滚动行数。
  • 在插入模式下,Ctrl D 会触发自动缩进(需先按下 Ctrl 再按 D)。

其他相关操作

  • Ctrl BCtrl F 分别向上和向下滚动整页。
  • Ctrl ECtrl Y 分别向下和向上滚动一行,而不移动光标。

配置滚动行为

可以通过以下命令修改默认滚动行数:

vim 复制代码
" 设置半屏滚动行数为 10
set scroll=10

编辑

i可以进行插入模式,可以将光标从一个方块转为一个竖线,表明是一个可以编辑的模式。

增删改查


  1. 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, 撤销与重做

  1. u撤销上一步
  2. ctrl+r 重做

选中、复制、剪贴、粘贴

第三章 完全接管--VScode快捷键与VIM快捷键的相互配合

  1. 打开文件浏览器(Explorer View)
  2. 打开终端
  3. 转到函数定义
  4. 打开函数定义

第四章 vscode

vscode的配置文件系统

VSCode 中有多个 JSON 文件用于用户配置,以下是常见的需要用户手动配置的文件:

  1. settings.json

    存储用户或工作区的个性化设置,路径通常位于:

    用户全局配置:%APPDATA%\Code\User\settings.json(Windows)~/.config/Code/User/settings.json(Linux/macOS)

    工作区配置:项目根目录下的 .vscode/settings.json

  2. keybindings.json

    自定义快捷键绑定,路径与 settings.json 同级(User 目录下)。支持覆盖默认快捷键或添加新绑定。

  3. tasks.json

    定义自定义任务(如编译、测试等),位于项目根目录的 .vscode 文件夹中。常用于配置构建流程或脚本执行。

  4. launch.json

    调试配置,存储调试环境的参数(如启动参数、环境变量等),路径为 .vscode/launch.json

  5. extensions.json

    推荐扩展列表,通常由 VSCode 自动生成,但用户可手动编辑以共享扩展配置。位于 .vscode/extensions.json

  6. snippets/*.json

    自定义代码片段,路径为 User/snippets/ 目录下的语言特定文件(如 javascript.json)。

  7. 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

工作区配置文件

  • .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:排除文件(扩展开发时使用)。

** 配置文件优先级规则 **

  1. 工作区配置(.vscode/ 下的文件)优先于全局配置。
  2. 语言特定配置优先于通用配置。
  3. 调试和任务配置仅在工作区中生效。

工作区(workspace)与文件夹(Folder)的区别

工作区 是Vscode中的高级概念,允许将多个文件夹组合为一个逻辑单元,适合管理多项目或复杂代码结构。工作区文件(.code-workspace)保存配置、调试设置和扩展推荐,适用于团队协作或跨项目配置共享。

文件夹 是直接打开单个目录的基本方式,配置(如.vscode/settings.json)仅作用于当前文件夹。适合简单项目或快速编辑独立文件。

核心差异点

配置作用范围

工作区配置覆盖所有包含的文件夹,优先级高于全局设置但低于文件夹级设置。文件夹级配置仅影响自身目录。

文件结构管理

工作区支持添加多个根文件夹(通过Add Folder to Workspace),每个文件夹保持独立路径。单一文件夹打开时仅显示该目录内容。

扩展与调试

工作区可定义推荐扩展列表(extensions.json),调试配置(launch.json)对所有子文件夹生效。文件夹模式下扩展和调试配置需单独设置。

典型使用场景

选择工作区

  • 前端项目需要同时管理frontendbackend目录
  • 微服务架构下协调多个服务代码
  • 需要统一团队开发环境配置

选择文件夹

  • 快速编辑单个脚本或文档
  • 临时查看第三方库源码
  • 无需复杂配置的简单项目
操作示例

创建工作区

  1. 通过File > Save Workspace As生成.code-workspace文件
  2. 右键资源管理器选择Add Folder to Workspace添加新目录
    或者通过安装拓展Workspace Sidebar来实现

切换模式

  • 关闭工作区时会提示保存更改
  • 通过File > Open Folder可切换回单文件夹模式

工作区提供更灵活的工程管理能力,而文件夹模式则追求轻量简洁。根据项目复杂度选择合适方式能显著提升开发效率。

只有修改后的setting才会出现在用户的目录下

核心联系和工作原理

VS Code 的设置遵循一个清晰的继承和覆盖 机制,并且 UI 编辑器与 JSON 文件是互通的。

  1. 设置的层次结构
    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 文件修改的效果是完全一样的。
  1. "只有修改了才出现" 是正确的
  • 默认值不会出现在您的 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 建立文档和大纲

相关推荐
天地之于壹炁兮4 小时前
用VSCode打造高效AI开发环境:从配置到实战
ide·人工智能·vscode
卓小帅的博客13 小时前
关于实现远程服务器使用本地网络的清晰简洁的教程
服务器·网络·vscode·连接超时
电子_咸鱼13 小时前
【STL string 全解析:接口详解、测试实战与模拟实现】
开发语言·c++·vscode·python·算法·leetcode
这儿有一堆花13 小时前
进阶 Markdown 指南:高级语法
vscode
q***062917 小时前
Node.js使用教程
node.js·编辑器·vim
zyplayer-doc17 小时前
目录支持批量操作,文档增加可见范围、锁定功能,PDF查看优化,zyplayer-doc 2.5.8 发布啦!
数据库·人工智能·pdf·编辑器·飞书·石墨文档
QQ__176461982417 小时前
Vscode安装步骤(详细版)
ide·vscode·编辑器
薛定e的猫咪19 小时前
【调试技巧】vscode 四种断点调试,快速定位 bug
ide·vscode·python·bug
HealthScience21 小时前
vscode怎么连接远程服务器/无密码(使用秘钥)登录
服务器·ide·vscode