﻿---
title: VSCode VIM Part I - EasyMotion
date: 2025-06-26
cover: https://assets.vluv.space/cover/ToolChain/easymotion.webp
tags:
  - VSCode
  - Vim
  - Catppuccin
excerpt: 🤖 Learn how to enhance VSCode's text navigation capabilities by setting up EasyMotion with VSCode Vim extension.
---

## Preview

VSCode 作为宇宙第一 IDE☝🏻，在文本跳转上体验比 LazyVim 稍逊一筹。发现 VSCode Vim 插件支持 easymotion 插件，在此基础上改改键位映射可以实现对 LazyVim 的拙劣模仿, 效果如下

当然也可以下载 neovim 插件，可以直接在 VSCode 中使用 LazyVim 的插件。据说 neovim 插件的性能更佳、但稳定性无法保证。

<video autoplay loop muted playsinline width="80%" alt="VSCode EasyMotion Demo">
    <source src="https://assets.vluv.space/vscode_easymotion.mp4" type="video/mp4"/>
</video>

## Setup


将如下配置粘贴到 VSCode 的 `settings.json` 文件中, use catppucin mocha theme btw

```json
{
  // leaderkey，这里设置为等号键
  "vim.leader": "=",
  // 启用 EasyMotion
  "vim.easymotion": true,
  // Catppuccin Mocha Color Scheme
  "vim.easymotionDimBackground": true,
  "vim.easymotionMarkerBackgroundColor": "#1e1e2e",
  "vim.easymotionMarkerForegroundColorOneChar": "#f38ba8",
  "vim.easymotionMarkerForegroundColorTwoCharFirst": "#fab387",
  "vim.easymotionMarkerForegroundColorTwoCharSecond": "#f9e2af",
  "vim.easymotionIncSearchForegroundColor": "#a6e3a1",
  "vim.easymotionDimColor": "#6c7086",
  "vim.easymotionMarkerFontWeight": "bold",
  // LazyVim-Like Key Bindings
  "vim.normalModeKeyBindings": [
    {
      "before": ["s"],
      "after": ["<leader>", "<leader>", "/"]
    },
    {
      "before": ["f"],
      "after": ["<leader>", "<leader>", "f"]
    },
    {
      "before": ["F"],
      "after": ["<leader>", "<leader>", "F"]
    }
  ]
}
```

> [!tip]
>
> 如果不习惯 Vim 的操作方式，可以使用以下扩展来实现类似的功能：
>
> - [jumpy - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=wmaurer.vscode-jumpy)
> - [Jump - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=wenfangdu.jump)
> - [Find => Jump - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=usernamehw.find-jump)
>
> VSCode Vim 插件应该是不支持直接修改 EasyMotion 的 keybinding 的，上面的设置算是一种变通方法。
> 以 `<ldr><ldr> / <char> ... <CR>` 为例，在`normalModeKeyBindings`中添加一个映射，这样在按下 `s` 键时就会被替换为 `<ldr><ldr> /`，然后再输入任意字符进行搜索即可

### Keybinding Reference

| Motion Command                | Description                                                                                                              |
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
| `<ldr><ldr> s <char>`         | Search character                                                                                                         |
| `<ldr><ldr> f <char>`         | Find character forwards                                                                                                  |
| `<ldr><ldr> F <char>`         | Find character backwards                                                                                                 |
| `<ldr><ldr> t <char>`         | Til character forwards                                                                                                   |
| `<ldr><ldr> T <char>`         | Til character backwards                                                                                                  |
| `<ldr><ldr> w`                | Start of word forwards                                                                                                   |
| `<ldr><ldr> b`                | Start of word backwards                                                                                                  |
| `<ldr><ldr> l`                | Matches beginning & ending of word, </br>camelCase, after `_`, and after `#` forwards                                    |
| `<ldr><ldr> h`                | Matches beginning & ending of word, </br>camelCase, after `_`, and after `#` backwards                                   |
| `<ldr><ldr> e`                | End of word forwards                                                                                                     |
| `<ldr><ldr> ge`               | End of word backwards                                                                                                    |
| `<ldr><ldr> j`                | Start of line forwards                                                                                                   |
| `<ldr><ldr> k`                | Start of line backwards                                                                                                  |
| `<ldr><ldr> / <char>... <CR>` | Search n-character                                                                                                       |
| `<ldr><ldr><ldr> bdt`         | Til character                                                                                                            |
| `<ldr><ldr><ldr> bdw`         | Start of word                                                                                                            |
| `<ldr><ldr><ldr> bde`         | End of word                                                                                                              |
| `<ldr><ldr><ldr> bdjk`        | Start of line                                                                                                            |
| `<ldr><ldr><ldr> j`           | JumpToAnywhere motion;</br> default behavior matches beginning & ending of word, </br>camelCase, after `_` and after `#` |

## Ref

[VSCodeVim/Vim: ⭐ Vim for Visual Studio Code](https://github.com/VSCodeVim/Vim#vim-easymotion)
[ggandor/leap.nvim: Neovim's answer to the mouse 🦘](https://github.com/ggandor/leap.nvim)
