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 — это расширение-эмулятор Vim для Visual Studio Code, которое переносит в редактор VS Code модальное редактирование и горячие клавиши Vim.
Это отдельное приложение или расширение для VS Code?Это расширение для VS Code, а не самостоятельный редактор: оно работает внутри VS Code и перехватывает нажатия клавиш, добавляя модальное редактирование в стиле Vim.
Нужно ли устанавливать настоящий Vim или Neovim, чтобы это работало?Нет, оно работает самостоятельно сразу после установки; Neovim нужен только по желанию, чтобы выполнять Ex-команды через экспериментальную интеграцию с Neovim.
Будет ли оно перехватывать сочетания клавиш на уровне ОС?Да, в Windows и macOS оно перехватывает управляющие клавиши так же, как настоящий 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, а также другие.
Поддерживает ли оно несколько курсоров?Да, есть отдельный режим Multi-Cursor для одновременного редактирования нескольких мест.
Creator
VSCodeVim
Size
22.3 MB
Stars
15.2K
Age
10y
Commits · 90 Days