The Vim mode for Visual Studio Code that works as expected.
- Vim style keybindings & looks
- Normal, Visual and Visual Line modes support
- Multi-cursor support
- Works with VS Code's default behaviors
:
started commands: Only a few are supported now.- Visual Block mode: Please use multi-cursor instead for now.
- Custom keybindings: On the roadmap.
Check the list here.
You can override default configurations in User and Workspace Settings.
Boolean
, Default: true
Set to false
to disable Ctrl+<key>
keybindings.
Boolean
, Default: true
Set to false
to keep VSCode's keybinding when searching.
Boolean
, Default: false
Set to true
to start in Insert mode when opening files.
Boolean
, Default: false
Set to true
to will make line numbers relative when not in Insert mode.
Boolean
, Default: false
Set to true
to copy to and paste from the system clipboard.
Boolean
, Default: true
Set to false
to disable Vim style navigation in sidebar.
You can make use of when clause contexts to construct keybindings that only apply in specific scenarios.
String
, Possible values: NORMAL
, INSERT
, VISUAL
, VISUAL LINE
Tracks the current editing mode. For backward compatibility, REPLACE
mode will appear as INSERT
.
Boolean
Set to true
when amVim is waiting for further input to match a command, otherwise false
.
This can be used to set up keybindings that perform a custom function when keys are pressed
independently, without overriding the default Vim style behavior for those keys when
prefixed.
For example, the following configuration will redefine Vim style navigation keys j
and k
to move the native cursor, stepping over folded code and stepping into wrapped lines, while
still allowing longer Vim commands like 3j
to work as expected:
[
{
"key": "j",
"command": "cursorDown",
"when": "editorTextFocus && amVim.mode == 'NORMAL' && !amVim.waitingForInput"
},
{
"key": "k",
"command": "cursorUp",
"when": "editorTextFocus && amVim.mode == 'NORMAL' && !amVim.waitingForInput"
}
]
Feel free to open issues to report bugs or require features.
Pull requests are welcomed too! See VS Code's official instructions about:
- Extension API
- Testing Extensions
- Protip: change
suite(
tosuite.only(
in a test file to run only a single test suite at a time. This saves quite a lot of time. Remember to remove the.only
part before making a Git commit.
- Protip: change