Vim
:star: Vim for Visual Studio Code
Install / Use
/learn @VSCodeVim/VimQuality Score
Category
Development & EngineeringSupported Platforms
README
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.
- 💾 Installation
- ⚙️ 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
- 🎩 VSCodeVim tricks!
- 📚 F.A.Q.
- ❤️ Contributing
💾 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 <kbd>cw</kbd> action to act consistently as its siblings (<kbd>yw</kbd> and <kbd>dw</kbd>) instead of acting as <kbd>ce</kbd>. | 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<br /> "<C-s>": false<br /> "<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
