An excerpt from the repository, fetched Nov 13, 2026.
Read the project’s introduction
VSCodeVim
Vim emulation for Visual Studio Code
VSCodeVim is a Vim emulator for Visual Studio Code.
📃 Our change log outlines the breaking/major/minor updates between releases.
Report missing features/bugs on GitHub.
Table of Contents (click to expand)
💾 Installation
Mac
Windows
⚙️ Settings
Quick Example
VSCodeVim settings
Neovim Integration
Key Remapping
"vim.insertModeKeyBindings"/"vim.normalModeKeyBindings"/"vim.visualModeKeyBindings"/"vim.operatorPendingModeKeyBindings"
"vim.insertModeKeyBindingsNonRecursive"/"normalModeKeyBindingsNonRecursive"/"visualModeKeyBindingsNonRecursive"/"operatorPendingModeKeyBindingsNonRecursive"
Debugging Remappings
Remapping more complex key combinations
Vim modes
Vim settings
.vimrc support
🖱️ Multi-Cursor Mode
🔌 Emulated Plugins
vim-airline
vim-easymotion
vim-surround
vim-commentary
vim-indent-object
vim-sneak
CamelCaseMotion
Input Method
ReplaceWithRegister
vim-textobj-entire
vim-textobj-arguments
🎩 VSCodeVim tricks!
📚 F.A.Q.
❤️ Contributing
Special shoutouts to:
💾 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
Read the full README on GitHub