Vim README

The project's README from github.com/VSCodeVim/Vim. As one markdown file: README.md.


VSCodeVim

Vim emulation for Visual Studio Code

VSCodeVim is a Vim emulator for Visual Studio Code.

Table of Contents (click to expand)

💾 Installation

VSCodeVim can be installed via the VS Code Marketplace or the OpenVSX Marketplace.

Mac

To enable key-repeating, execute the following in your Terminal, log out and back in, and then restart VS Code:

defaults write com.microsoft.VSCode ApplePressAndHoldEnabled -bool false              # For VS Code
defaults write com.microsoft.VSCodeInsiders ApplePressAndHoldEnabled -bool false      # For VS Code Insider
defaults write com.vscodium ApplePressAndHoldEnabled -bool false                      # For VS Codium
defaults write com.microsoft.VSCodeExploration ApplePressAndHoldEnabled -bool false   # For VS Codium Exploration users
defaults write com.exafunction.windsurf ApplePressAndHoldEnabled -bool false          # For Windsurf
defaults delete -g ApplePressAndHoldEnabled                                           # If necessary, reset global default

We also recommend increasing Key Repeat and Delay Until Repeat settings in System Settings/Preferences -> Keyboard.

Windows

Like real vim, VSCodeVim will take over your control keys. This behavior can be adjusted with the useCtrlKeys and handleKeys settings.

⚙️ Settings

The settings documented here are a subset of the supported settings; the full list is described in the FEATURES -> Settings tab of VSCodeVim's extension details page, which can be found in the extensions view of VS Code.

Quick Example

Below is an example of a settings.json file with settings relevant to VSCodeVim:

{
  "vim.easymotion": true,
  "vim.incsearch": true,
  "vim.useSystemClipboard": true,
  "vim.useCtrlKeys": true,
  "vim.hlsearch": true,
  "vim.insertModeKeyBindings": [
    {
      "before": ["j", "j"],
      "after": ["<Esc>"]
    }
  ],
  "vim.normalModeKeyBindingsNonRecursive": [
    {
      "before": ["<leader>", "d"],
      "after": ["d", "d"]
    },
    {
      "before": ["<C-n>"],
      "commands": [":nohl"]
    },
    {
      "before": ["K"],
      "commands": ["lineBreakInsert"],
      "silent": true
    }
  ],
  "vim.leader": "<space>",
  "vim.handleKeys": {
    "<C-a>": false,
    "<C-f>": false
  },
  // To improve performance
  "extensions.experimental.affinity": {
    "vscodevim.vim": 1
  }
}

VSCodeVim settings

These settings are specific to VSCodeVim.

Setting Description Type Default Value
vim.changeWordIncludesWhitespace Include trailing whitespace when changing word. This configures the cw action to act consistently as its siblings (yw and dw) instead of acting as ce. Boolean false
vim.cursorStylePerMode.{Mode} Configure a specific cursor style for {Mode}. Omitted modes will use default cursor type Supported cursors: line, block, underline, line-thin, block-outline, and underline-thin. String None
vim.digraphs.{shorthand} Set custom digraph shorthands that can override the default ones. Entries should map a two-character shorthand to a descriptive string and one or more UTF16 code points. Example: "R!": ["🚀", [55357, 56960]] Object {"R!": ["🚀", [0xD83D, 0xDE80]]
vim.disableExtension Disable VSCodeVim extension. This setting can also be toggled using toggleVim command in the Command Palette Boolean false
vim.handleKeys Delegate configured keys to be handled by VS Code instead of by the VSCodeVim extension. Any key in keybindings section of the package.json that has a vim.use<C-...> in the when argument can be delegated back to VS Code by setting "<C-...>": false. Example: to use ctrl+f for find (native VS Code behavior): "vim.handleKeys": { "<C-f>": false }. String "<C-d>": true
"<C-s>": false
"<C-z>": false
vim.overrideCopy Override VS Code's copy command with our own, which works correctly with VSCodeVim. If cmd-c/ctrl-c is giving you issues, set this to false and complain here. Boolean false
vim.useSystemClipboard Use the system clipboard register (*) as the default register Boolean false
vim.searchHighlightColor Background color of non-current search matches String findMatchHighlightBackground ThemeColor
vim.searchHighlightTextColor Foreground color of non-current search matches String None
vim.searchMatchColor Background color of current search match String findMatchBackground ThemeColor
vim.searchMatchTextColor Foreground color of current search match String None
vim.substitutionColor Background color of substitution text when vim.inccommand is enabled String "#50f01080"
vim.substitutionTextColor Foreground color of substitution text when vim.inccommand is enabled String None
vim.startInInsertMode Start in Insert mode instead of Normal Mode Boolean false
vim.useCtrlKeys Enable Vim ctrl keys overriding common VS Code operations such as copy, paste, find, etc. Boolean true
vim.visualstar In visual mode, start a search with * or # using the current selection Boolean false
vim.highlightedyank.enable Enable highlighting when yanking Boolean false
vim.highlightedyank.color Set the color of yank highlights String rgba(250, 240, 170, 0.5)
vim.highlightedyank.duration Set the duration of yank highlights Number 200

Neovim Integration

:warning: Experimental feature. Please leave feedback on neovim integration here.

To leverage neovim for Ex-commands,

  1. Install neovim
  2. Modify the following configurations:
Setting Description Type Default Value
vim.enableNeovim Enable Neovim Boolean false
vim.neovimPath Full path to neovim executable. If left empty, PATH environment variable will be automatically checked for neovim path. String
vim.neovimUseConfigFile If true, Neovim will load a config file specified by vim.neovimConfigPath. This is necessary if you want Neovim to be able to use its own plugins. Boolean false
vim.neovimConfigPath Path that Neovim will load as config file. If left blank, Neovim will search in its default location. String

Here's some ideas on what you can do with neovim integration:

Key Remapping

Custom remappings are defined on a per-mode basis.

"vim.insertModeKeyBindings"/"vim.normalModeKeyBindings"/"vim.visualModeKeyBindings"/"vim.operatorPendingModeKeyBindings"

    "vim.insertModeKeyBindings": [
        {
            "before": ["j", "j"],
            "after": ["<Esc>"]
        }
    ]
    "vim.normalModeKeyBindings": [
        {
            "before": ["£"],
            "after": ["#"]
        }
    ]
    "vim.normalModeKeyBindings": [
        {
            "before": [":"],
            "commands": [
                "workbench.action.showCommands",
            ],
            "silent": true
        }
    ]
    "vim.normalModeKeyBindings": [
        {
            "before": ["<leader>", "m"],
            "commands": [
                "bookmarks.toggle"
            ]
        },
        {
            "before": ["<leader>", "b"],
            "commands": [
                "bookmark

Vim (VSCodeVim/Vim)

Searching Database…

15.2K ·GitHub
这是什么?VSCodeVim 是一个为 Visual Studio Code 提供的 Vim 模拟器扩展,把 Vim 的模式编辑和快捷键带进 VS Code 编辑器中。
这是独立应用还是 VS Code 扩展?它是一个 VS Code 扩展,不是独立编辑器。它在 VS Code 内运行,并拦截按键,以加入 Vim 风格的模式编辑。
要让它正常工作,我是否需要安装真正的 Vim 或 Neovim?不需要,开箱即可独立使用。只有可选地通过实验性的 Neovim 集成来执行 Ex 命令时,才需要 Neovim。
它会接管我的操作系统级快捷键吗?会的。在 Windows 和 Mac 上,它会像真正的 Vim 一样接管控制键,这可能与 VS Code 或操作系统的常规快捷键冲突,除非你调整 useCtrlKeys 或 handleKeys 等设置。
它在 Mac 和 Windows 上的表现一样吗?基本一样,但每个平台都需要一点小调整:Mac 用户需要通过终端命令开启按键重复,Windows 用户可能需要调整 Ctrl 键的处理方式。
它支持 .vimrc 设置吗?README 将“.vimrc 支持”列为一个功能方向,意味着你现有的部分 Vim 配置可以沿用过来。
我可以按 Vim 模式分别重新映射按键吗?可以。你可以分别为插入模式、普通模式、可视模式和操作符待决模式定义自定义按键映射,使用 vim.normalModeKeyBindings 等设置,并配合 before、after、commands 选项。
它能模拟常见的 Vim 插件吗?可以,它能模拟知名插件,例如 vim-surround、vim-commentary、vim-easymotion、vim-sneak、CamelCaseMotion 和 vim-airline 等。
它支持多光标吗?支持,它有专门的多光标模式,可以同时编辑多个位置。
Creator
VSCodeVim
Size
22.3 MB
Stars
15.2K
Age
10y
Commits · 90 Days