Quick-start gist. Full docs, 50+ keybindings, and multi-editor support → github.com/wojukasz/VimCode
Bring the muscle memory of LazyVim to VS Code (and Cursor, Windsurf, Antigravity). Copy two config files, install four extensions, and you get modal editing with a which-key popup that guides you through every leader shortcut.
| Extension | Purpose | Required? |
|---|---|---|
| vscodevim.vim | Vim emulation | Yes |
| VSpaceCode.whichkey | ~ popup menu |
Yes |
| eamodio.gitlens | Git blame, log, diff | Recommended |
| hoovercj.vscode-settings-cycler | Toggle relative line numbers | Optional |
VS Code
code --install-extension vscodevim.vim && \
code --install-extension VSpaceCode.whichkey && \
code --install-extension eamodio.gitlens && \
code --install-extension hoovercj.vscode-settings-cyclerCopy both files from this gist into your editor's user settings directory, replacing any existing files (back them up first).
| Platform | Path |
|---|---|
| macOS | ~/Library/Application Support/<Editor>/User/ |
| Linux | ~/.config/<Editor>/User/ |
| Windows | %APPDATA%\<Editor>\User\ |
Replace <Editor> with Code, Cursor, Windsurf, etc.
settings.json— all<leader>bindings and which-key menu treekeybindings.json— modifier key bindings (Ctrl/Alt/Shift + h/j/k/l, etc.)
Restart your editor after copying.
Note:
~and<space>have distinct roles here.
~opens the which-key popup menu — use it to browse and discover keybindings.<space>is the Vim leader key — use it to execute bindings directly (e.g.<space>fffinds files).You don't need to go through the popup every time. Once you know a binding, just type it with
<space>directly.~is there when you need a reminder.Note:
~normally toggles character case in Vim. If you use that frequently, see TROUBLESHOOTING.md for alternative trigger key options.
Press ~ in Normal mode → a popup appears showing every available leader shortcut.
<space> Quick Open (find files)
, Switch buffer
/ Search in files (grep)
f → +File ff=Find fr=Recent fn=New fb=Buffers ft=Terminal
s → +Search sg=Grep sw=Word sr=Replace ss=Symbols sc=Commands
c → +Code ca=Action cf=Format cr=Rename cd=Diagnostics
b → +Buffer bb=Switch bd=Delete bn=Next bp=Prev
g → +Git gg=Status gb=Blame gd=Diff gl=Log gc=Commit
G → +Go To d=Definition r=References I=Implementation y=Type
w → +Window h/j/k/l=Focus -=Split↓ |=Split→ d=Close
x → +Diagnostics xx=Panel [d=Prev ]d=Next
u → +UI uw=Wrap uz=Zen ur=ClearHL ul=LineNums
You never need to memorise keybindings — just press ~ and follow the menu.
| Key | Action |
|---|---|
<space><space> |
Find files |
<space>/ |
Grep across project |
<space>, |
Switch buffer |
Shift+h / Shift+l |
Previous / next buffer |
Ctrl+h/j/k/l |
Move between splits |
| Key | Action |
|---|---|
<space>ca |
Code action |
<space>cr |
Rename symbol |
<space>cf |
Format document |
gd |
Go to definition |
gr |
Go to references |
K |
Show hover |
| Key | Action |
|---|---|
<space>gg |
Git status |
<space>gb |
Git blame |
<space>gd |
Git diff |
[h / ]h |
Previous / next hunk |
| Key | Action |
|---|---|
jk or jj |
Escape to Normal mode |
<leader>j |
EasyMotion jump |
s / S |
Sneak forward / backward |
ys / ds / cs |
Surround add / delete / change |
Ctrl+s |
Save file |
Without this, holding j won't repeat in Normal mode.
defaults write com.microsoft.VSCode ApplePressAndHoldEnabled -bool false
# Restart VS Code after running thisReplace com.microsoft.VSCode with the bundle ID for your editor (e.g. com.todesktop.230313mzl4w4u92 for Cursor).
| Doc | Link |
|---|---|
| Setup guide | SETUP.md |
| All 50+ keybindings | KEYBINDINGS.md |
| Tips & tricks | TIPS_AND_TRICKS.md |
| Troubleshooting | TROUBLESHOOTING.md |
| Changelog | CHANGELOG.md |
This gist tracks the stable core config. For the latest features, follow VimCode.
how can i config this in my vscode