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.
Thanks for the update! I’ll keep an eye on it and post any issues or suggestions directly on this page: https://github.com/wojukasz/VimCode/issues. Keep up the great work!