使用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 建立文档和大纲

相关推荐
ayaya_mana1 小时前
VS Code 远程开发:SSH连接与远程资源管理器的配置
linux·ide·windows·vscode·远程资源管理
吞掉星星的鲸鱼2 小时前
VScode安装codex
ide·vscode·编辑器
claider3 小时前
Vim User Manual 阅读笔记 User_03.txt move around
笔记·编辑器·vim
啊湘4 小时前
VSCODE英文界面切换为中文(适用CURSOR等使用)
ide·vscode·编辑器·bug·cursor
叶庭云6 小时前
一文理解在 VSCode 中成功使用 Claude Code 插件
vscode·插件·api key·vibe coding·claude code·base url·coding agent
wincheshe7 小时前
React Native inspector 点击组件跳转编辑器技术详解
react native·react.js·编辑器
zhaqonianzhu17 小时前
【vsc】cpptools占用内存过大
vscode
智慧地球(AI·Earth)1 天前
Codex配置问题解析:wire_api格式不匹配导致的“Reconnecting...”循环
开发语言·人工智能·vscode·codex·claude code
markvivv1 天前
在 Kylin Linux Advanced Server for Kunpeng V10 上构建 VSCode 1.106
linux·vscode·kylin
zhangfeng11331 天前
Kiro python环境的设置 中文语言包设置,通用vscode ,因为kiro是vscode基础上做的
开发语言·vscode·python