-
Star
(131)
You must be signed in to star a gist -
Fork
(18)
You must be signed in to fork a gist
-
-
Save nikolovlazar/1174876ab2769c52ac9fc1534c557d70 to your computer and use it in GitHub Desktop.
[ | |
// Navigation | |
{ | |
"key": "ctrl-h", | |
"command": "workbench.action.navigateLeft" | |
}, | |
{ | |
"key": "ctrl-l", | |
"command": "workbench.action.navigateRight" | |
}, | |
{ | |
"key": "ctrl-k", | |
"command": "workbench.action.navigateUp" | |
}, | |
{ | |
"key": "ctrl-j", | |
"command": "workbench.action.navigateDown" | |
}, | |
{ | |
"key": "space ,", | |
"command": "workbench.action.showAllEditors", | |
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)" | |
}, | |
{ | |
"key": "space e", | |
"command": "runCommands", | |
"args": { | |
"commands": [ | |
"workbench.action.toggleSidebarVisibility", | |
"workbench.files.action.focusFilesExplorer" | |
] | |
}, | |
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus) && !sideBarFocus" | |
}, | |
{ | |
"key": "space e", | |
"command": "runCommands", | |
"args": { | |
"commands": [ | |
"workbench.action.toggleSidebarVisibility", | |
"workbench.action.focusActiveEditorGroup" | |
] | |
}, | |
"when": "sideBarFocus && !inputFocus" | |
}, | |
{ | |
"key": "space e", | |
"when": "vim.mode == 'Normal' && editorTextFocus && foldersViewVisible", | |
"command": "workbench.action.toggleSidebarVisibility" | |
}, | |
{ | |
"key": "s h", | |
"command": "workbench.action.splitEditor", | |
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)" | |
}, | |
{ | |
"key": "s v", | |
"command": "workbench.action.splitEditorDown", | |
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)" | |
}, | |
// Coding | |
{ | |
"key": "space c a", | |
"command": "editor.action.codeAction", | |
"when": "vim.mode == 'Normal' && editorTextFocus" | |
}, | |
{ | |
"key": "shift-k", | |
"command": "editor.action.moveLinesUpAction", | |
"when": "vim.mode == 'VisualLine' && editorTextFocus" | |
}, | |
{ | |
"key": "shift-j", | |
"command": "editor.action.moveLinesDownAction", | |
"when": "vim.mode == 'VisualLine' && editorTextFocus" | |
}, | |
{ | |
"key": "shift-k", | |
"command": "editor.action.showHover", | |
"when": "vim.mode == 'Normal' && editorTextFocus" | |
}, | |
{ | |
"key": "space c r", | |
"command": "editor.action.rename", | |
"when": "vim.mode == 'Normal' && editorTextFocus" | |
}, | |
{ | |
"key": "space c s", | |
"command": "workbench.action.gotoSymbol", | |
"when": "vim.mode == 'Normal' && editorTextFocus" | |
}, | |
{ | |
"key": "space b d", | |
"command": "workbench.action.closeActiveEditor", | |
"when": "(vim.mode == 'Normal' && editorTextFocus) || !inputFocus" | |
}, | |
{ | |
"key": "space b o", | |
"command": "workbench.action.closeOtherEditors", | |
"when": "(vim.mode == 'Normal' && editorTextFocus) || !inputFocus" | |
}, | |
{ | |
"key": "space space", | |
"command": "workbench.action.quickOpen", | |
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)" | |
}, | |
{ | |
"key": "space g d", | |
"command": "editor.action.revealDefinition", | |
"when": "vim.mode == 'Normal' && editorTextFocus" | |
}, | |
{ | |
"key": "space g r", | |
"command": "editor.action.goToReferences", | |
"when": "vim.mode == 'Normal' && editorTextFocus" | |
}, | |
{ | |
"key": "space g i", | |
"command": "editor.action.goToImplementation", | |
"when": "vim.mode == 'Normal' && editorTextFocus" | |
}, | |
{ | |
"key": "space s g", | |
"command": "workbench.action.findInFiles", | |
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)" | |
}, | |
{ | |
"key": "space g g", | |
"command": "runCommands", | |
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)", | |
"args": { | |
"commands": ["workbench.view.scm", "workbench.scm.focus"] | |
} | |
}, | |
{ | |
"key": "ctrl-n", | |
"command": "editor.action.addSelectionToNextFindMatch", | |
"when": "(vim.mode == 'Normal' || vim.mode == 'Visual') && (editorTextFocus || !inputFocus)" | |
}, | |
// File Explorer | |
{ | |
"key": "r", | |
"command": "renameFile", | |
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus" | |
}, | |
{ | |
"key": "c", | |
"command": "filesExplorer.copy", | |
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus" | |
}, | |
{ | |
"key": "p", | |
"command": "filesExplorer.paste", | |
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus" | |
}, | |
{ | |
"key": "x", | |
"command": "filesExplorer.cut", | |
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus" | |
}, | |
{ | |
"key": "d", | |
"command": "deleteFile", | |
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus" | |
}, | |
{ | |
"key": "a", | |
"command": "explorer.newFile", | |
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus" | |
}, | |
{ | |
"key": "s", | |
"command": "explorer.openToSide", | |
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus" | |
}, | |
{ | |
"key": "shift-s", | |
"command": "runCommands", | |
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus", | |
"args": { | |
"commands": [ | |
"workbench.action.splitEditorDown", | |
"explorer.openAndPassFocus", | |
"workbench.action.closeOtherEditors" | |
] | |
} | |
}, | |
{ | |
"key": "enter", | |
"command": "explorer.openAndPassFocus", | |
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceIsFolder && !inputFocus" | |
}, | |
{ | |
"key": "enter", | |
"command": "list.toggleExpand", | |
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && explorerResourceIsFolder && !inputFocus" | |
}, | |
// Debug | |
{ | |
"key": "space d a", | |
"command": "workbench.action.debug.selectandstart", | |
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus) && debuggersAvailable" | |
}, | |
{ | |
"key": "space d t", | |
"command": "workbench.action.debug.stop", | |
"when": "vim.mode == 'Normal' && editorTextFocus && inDebugMode && !focusedSessionIsAttached" | |
}, | |
{ | |
"key": "space d o", | |
"command": "workbench.action.debug.stepOver", | |
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus) && inDebugMode && debugState == 'stopped'" | |
}, | |
{ | |
"key": "space d b", | |
"command": "editor.debug.action.toggleBreakpoint", | |
"when": "vim.mode == 'Normal' && editorTextFocus" | |
}, | |
{ | |
"key": "space d e", | |
"command": "editor.debug.action.showDebugHover", | |
"when": "vim.mode == 'Normal' && editorTextFocus && inDebugMode && debugState == 'stopped'" | |
}, | |
{ | |
"key": "space d c", | |
"command": "workbench.action.debug.continue", | |
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus) && inDebugMode && debugState == 'stopped'" | |
} | |
] |
If the space key is set, EasyMotion will become ineffective.
@qingzhoufeihu I don't use EasyMotion, so I didn't know about that. How would you get around this? Space is oftentimes set as the leaderkeys in vim/neovim, so I'd look into changing EasyMotion's trigger instead (if it's possible).
If the space key is set, EasyMotion will become ineffective.
@qingzhoufeihu I don't use EasyMotion, so I didn't know about that. How would you get around this? Space is oftentimes set as the leaderkeys in vim/neovim, so I'd look into changing EasyMotion's trigger instead (if it's possible).
Thank you for your reply. I changed the leader to < ,
and it perfectly solved the problem.
Navigation
ctrl + h : move to left window
ctrl + j : move down window
ctrl + k : move up window
ctrl + l : move to right window
space + , : show all editors
space + e : open sidebar
space s g : find in files
space g g : go to git
tab : next tab in group
shift + tab : prevoius tab in group
s h : split editor
s v : split editor down
Coding
shift + j : move line down ( editor mode)
shift + k : move line up ( editor mode)
shift + k : show hover
space c a : show code action
space c r : rename veriable
space c s : show symbol
space b d : close active editor
space b o : close other editor
space space : quick open
space g d : go to definition
space g r : go to reference
space g i : go to implementation
space s g : find in files
ctrl + n : add slection next find match (normal mode & visual mode)
File Explorer
r : rename file
c : copy file
p : paste file
x : cut file
d : delete file
enter: open file
s : open to side
shift + s : split editor down
a : add new file
shift + a : add new folder
Maybe usefull for some people that need a cheatsheet
AMAZING
This was so helpful, I tried doing this on my own but was having issues with the sidebar.
Much love!
Thank ... You... So... F... Much!!!
Absolutely Amazing keybindings, much love and appreciation 🙏🏽
Glad you found this useful @hvenry @ravicorreia 🙌
@nikolovlazar thanks a lot. This is what I need - good from both worlds - VimVS.
If you have a problem with space+e try this:
"key": "space e",
"when": "vim.mode == 'Normal' && editorTextFocus && foldersViewVisible",
"command": "workbench.action.toggleSidebarVisibility"
},
{
"key": "space e",
"when": "vim.mode == 'Normal' && sideBarVisible",
"command": "workbench.action.toggleSidebarVisibility"
}
Anybody knows how to make the file explorer related bindings to work on solution explorer that comes with C# dev kit. I am trying to migrate from Visual studio to Code for that. I did not find any documentation around that as well.
I saw that someone added keybinds for splitting the editor, which is exactly what I wanted, but I also noticed that the bindings s h
and s v
conflicted with Vim's native s
(substitute) command, which I use quite a bit.
So I tested a few ergonomic alternatives and landed on the following setup, which feels much more natural:
{
"key": "space h",
"command": "workbench.action.splitEditor",
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
},
{
"key": "space v",
"command": "workbench.action.splitEditorDown",
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
},
I also changed the close current pane, since personally space b d
and space b o
didn't feel very comfortable and VSCode’s default ctrl+w
wasn’t working inside Vim mode. (If you’re more used to Vim’s :q
command to close, you could use space q
instead, but I chose space w
because it matches browser tab behavior and VSCode’s native pane-closing shortcut.). This one's personal preference but I'll still add it in case someone else also likes it.
{
"key": "space w",
"command": "workbench.action.closeActiveEditor",
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
},
{
"key": "space shift+w",
"command": "workbench.action.closeOtherEditors",
"when": "(vim.mode == 'Normal' && editorTextFocus) || !inputFocus"
},
Lastly, I adjusted the Explorer bindings to avoid conflict with Vim motions and maintain consistent muscle memory:
{
"key": "space e h",
"command": "explorer.openToSide",
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
{
"key": "space e v",
"command": "runCommands",
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus",
"args": {
"commands": [
"workbench.action.splitEditorDown",
"explorer.openAndPassFocus",
"workbench.action.closeOtherEditors"
]
}
}
Just thought I'd comment this since I really liked these modifications to this already amazing config, thank you so much!
This is amazing, thank you very much. The only issue i have is that, space is always triggered as leader and expects another key to be pressed, even in the terminal. As you can guess, it does not even allow me to write anything on the terminal with more than one word as it breaks. Does anyone have this issue and a way to solve it?
If the space key is set, EasyMotion will become ineffective.