chezmoi: windows migration dir

This commit is contained in:
js0ny 2025-10-20 03:58:34 +01:00
parent 52b70819bf
commit c24adf35d4
51 changed files with 3403 additions and 3840 deletions

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,133 @@
snippet mk "inline Math" iwA
$${1}$
endsnippet
snippet dmi "display Math" iwA
$ ${1} $
endsnippet
snippet dmm "display Math" iwA
$
${1}
$
endsnippet
snippet pp "parenthesis" iAm
(${1})
endsnippet
snippet lim "limit" iAm
lim_(${1:n} -> ${2:oo})
endsnippet
snippet derive "derive" iAm
derive(${1:f}, ${2:x})
endsnippet
snippet part "partial" iAm
(diff ${1:f})/(diff ${3:x})
endsnippet
snippet sb "subscript" iAm
_(${1:2})
endsnippet
snippet sr "square" iAm
^2
endsnippet
snippet pow "to the ... power" iAm
^(${1:3})
endsnippet
snippet veps "epsilon.alt" iAm
epsilon.alt
endsnippet
snippet ;; "\;" iAm
\;
endsnippet
snippet ,, "\," iAm
\,
endsnippet
snippet `([A-Za-z\)])(\d)` "auto subscript" iAm
`` rv = m[1] + "_" + m[2]``
endsnippet
snippet `([A-Za-z\)])_(\d{2})` "auto subscript" iAm
`` rv = m[1] + "_(" + m[2] + ")" ``
endsnippet
snippet `(?<![A-Za-z])([A-Za-hk-z])([acdijkmnpqrstABCDIJKMNPQRST])\2` "auto subscript" iAm
`` rv = m[1] + "_" + m[2] ``
endsnippet
# Custom: Add more greek letters
snippet `(\)|mu|alpha|sigma|rho|beta|gamma|delta|zeta|eta|varepsilon|epsilon|theta|iota|kappa|vartheta|lambda|nu|pi|rho|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)([acdijkmnpqrstABCDIJKMNPQRST])\2` "auto subscript for greek letter" iAm
`` rv = m[1] + "_" + m[2].substring(0, 1) ``
endsnippet
snippet `(?<![A-Za-z])([A-Za-hk-z01])(grave|acute|hat|tilde|macron|breve|dot|ddot|dddot|ddddot|diaer|circle|caron|vec|upright|italic|b|sans|frak|mono|bb|cal|ov)` "hat" iAm
``
const map = { "ddot": "dot.double", "dddot": "dot.triple", "ddddot": "dot.quad", "vec": "arrow", "b": "bold", "ov": "overline" }
rv = (map[m[2]] || m[2]) + "(" + m[1] + ")"
``
endsnippet
snippet `(mu|alpha|sigma|rho|beta|gamma|delta|zeta|eta|varepsilon|epsilon|theta|iota|kappa|vartheta|lambda|nu|pi|rho|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(grave|acute|hat|tilde|macron|breve|dot|ddot|dddot|ddddot|diaer|circle|caron|vec|upright|italic|b|sans|frak|mono|bb|cal|ov)` "hat" iAm
``
const map = { "ddot": "dot.double", "dddot": "dot.triple", "ddddot": "dot.quad", "vec": "arrow", "b": "bold", "ov": "overline" }
rv = (map[m[2]] || m[2]) + "(" + m[1] + ")"
``
endsnippet
snippet `((grave|acute|hat|tilde|macron|breve|dot|dot\.double|dot\.triple|dot\.quad|diaer|circle|acute\.double|caron|arrow|arrow\.l|upright|italic|bold|sans|frak|mono|bb|cal)\([a-zA-Z\d]+\))(grave|acute|hat|tilde|macron|breve|dot|ddot|dddot|ddddot|diaer|circle|caron|vec|upright|italic|b|sans|frak|mono|bb|cal|ov)` "hat" iAm
``
const map = { "ddot": "dot.double", "dddot": "dot.triple", "ddddot": "dot.quad", "vec": "arrow", "b": "bold", "ov": "overline" }
rv = (map[m[3]] || m[3]) + "(" + m[1] + ")"
``
endsnippet
snippet `(?<!\.)alt` "alt" iAm
.alt
endsnippet
snippet invs "inverse" iAm
^(-1)
endsnippet
snippet xl "vector" iAm
arrow(${1:x})
endsnippet
snippet @< "angle" iAm
angle.l ${1:x} angle.r
endsnippet
snippet HL "highlight" iA
#highlight[${VISUAL}]
endsnippet
snippet iiint "triple integral" iAm
integral.triple ${1}
endsnippet
snippet oint "closed line integral" iAm
integral.cont ${1}
endsnippet
snippet iint "double integral" iAm
integral.double ${1}
endsnippet
snippet int "integral" iAm
integral ${1}
endsnippet
snippet // "frac" iAm
frac(${1:1}, ${2:2})
endsnippet

View file

@ -0,0 +1,726 @@
// Place your key bindings in this file to override the defaults
[
// #region mac minor change for cross-platform compatiblity
{
"key": "cmd+r",
"command": "workbench.action.openRecent"
},
{
"key": "ctrl+r",
"command": "-workbench.action.openRecent"
},
{
"key": "cmd+k cmd+o",
"command": "workbench.action.files.openFileFolder",
"when": "isMacNative && openFolderWorkspaceSupport"
},
// #endregion
// #region quickOpen (Telescope)
{
"key": "cmd+p",
"command": "workbench.action.quickOpen"
},
{
"key": "cmd+p",
"command": "workbench.action.quickOpenNavigatePrevious",
"when": "inQuickOpen"
},
{
"key": "cmd+n",
"command": "workbench.action.quickOpenNavigateNext",
"when": "inQuickOpen"
},
{
"key": "cmd+[",
"command": "workbench.action.closeQuickOpen",
"when": "inQuickOpen"
},
{
"key": "ctrl+[",
"command": "workbench.action.closeQuickOpen",
"when": "inQuickOpen"
},
{ // Emacs-like
"key": "ctrl+g",
"command": "workbench.action.closeQuickOpen",
"when": "inQuickOpen"
},
{ // Emacs-like: M-x to show command palette
"key": "alt+x",
"command": "workbench.action.showCommands"
},
// #endregion
// #region Extension: Code Runner
{
"key": "ctrl+alt+n",
"command": "-code-runner.run"
},
// #endregion
// #region Nvim-Tree like File Explorer
// n, e : move cursor up/down
// h : move cursor to parent folder
// i : open file or folder
{
"key": "e",
"command": "list.focusUp",
"when": "notebookEditorFocused && !inputFocus && !notebookOutputInputFocused"
},
{
"key": "k",
"command": "-list.focusUp",
"when": "notebookEditorFocused && !inputFocus && !notebookOutputInputFocused"
},
{
"key": "e",
"command": "list.focusUp",
"when": "listFocus && !inputFocus"
},
{
"key": "k",
"command": "-list.focusUp",
"when": "listFocus && !inputFocus"
},
{
"key": "f",
"command": "filesExplorer.findInWorkspace",
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
{
"key": "n",
"command": "list.focusDown",
"when": "listFocus && !inputFocus"
},
{
"key": "j",
"command": "-list.focusDown",
"when": "listFocus && !inputFocus"
},
{
"key": "i",
"command": "list.select",
"when": "listFocus && !inputFocus"
},
{
"key": "l",
"command": "-list.select",
"when": "listFocus && !inputFocus"
},
{ // z: Close all folders
"key": "z",
"command": "workbench.files.action.collapseExplorerFolders",
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
{ // <leader>e: Close left sidebar if is in file explorer
"key": "space e",
"command": "workbench.action.toggleSidebarVisibility",
"when": "sideBarFocus && !inputFocus && !searchViewletVisible && filesExplorerFocus"
},
{ // <leader>e: Focus on file explorer if is on sidebar and not in file explorer
"key": "space e",
"command": "workbench.files.action.focusFilesExplorer",
"when": "sideBarFocus && !inputFocus && !searchViewletVisible && !filesExplorerFocus"
},
{ // <leader>g: Focus on file explorer if is on sidebar and not in file explorer
"key": "space g",
"command": "workbench.scm.focus",
"when": "sideBarFocus && !inputFocus && !searchViewletVisible && !scmViewletVisible"
},
{ // a: add
"key": "a",
"command": "explorer.newFile",
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
{ // p: paste
"key": "p",
"command": "filesExplorer.paste",
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
{ // x: cut
"key": "x",
"command": "filesExplorer.cut",
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
{ // d: delete
"key": "d",
"command": "deleteFile",
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
{ // r: rename
"key": "r",
"command": "renameFile",
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
{ // s: open in vertical split / to side
"key": "s",
"command": "explorer.openToSide",
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
{ // A: add folder
"key": "shift+a",
"command": "explorer.newFolder",
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
{ // C: Copy path
"key": "shift+c",
"command": "copyFilePath",
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
{ // E: Open in File Explorer
"key": "shift+e",
"command": "revealFileInOS",
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
{ // E: Open in File Explorer (WSL)
"key": "shift+e",
"command": "remote-wsl.revealInExplorer",
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus && remoteName == 'wsl'"
},
{ // O: Open with System App
"key": "shift+o",
"command": "openInExternalApp.open",
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
{ // Y: Copy Relative Path
"key": "shift+y",
"command": "copyRelativeFilePath",
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
{ // R: Copy Relative Path
"key": "shift+r",
"command": "workbench.files.action.refreshFilesExplorer",
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
{ // T: Open in terminal
"key": "shift+t",
"command": "openInIntegratedTerminal",
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
// #endregion
// #region Vim-like Hover Browsing
{
"key": "h",
"command": "editor.action.scrollLeftHover",
"when": "editorHoverFocused"
},
{
"key": "n",
"command": "editor.action.scrollDownHover",
"when": "editorHoverFocused"
},
{
"key": "e",
"command": "editor.action.scrollUpHover",
"when": "editorHoverFocused"
},
{
"key": "i",
"command": "editor.action.scrollRightHover",
"when": "editorHoverFocused"
},
// #endregion
// #region Comment and semicolons
{
"key": "cmd+;",
"command": "extension.insertSemicolon",
"when": "editorTextFocus"
},
{
"key": "cmd+/",
"command": "-extension.insertSemicolon",
"when": "editorTextFocus"
},
// #endregion
// #region Vim-like Jupyter Navigation
{
"key": "n",
"command": "notebook.focusNextEditor",
"when": "editorTextFocus && inputFocus && notebookEditorFocused && vim.mode == 'Normal' && notebookEditorCursorAtBoundary != 'none' && notebookEditorCursorAtBoundary != 'top'"
},
{
"key": "j",
"command": "-notebook.focusNextEditor",
"when": "editorTextFocus && inputFocus && notebookEditorFocused && vim.mode == 'Normal' && notebookEditorCursorAtBoundary != 'none' && notebookEditorCursorAtBoundary != 'top'"
},
{
"key": "e",
"command": "notebook.focusPreviousEditor",
"when": "editorTextFocus && inputFocus && notebookEditorFocused && vim.mode == 'Normal' && notebookEditorCursorAtBoundary != 'bottom' && notebookEditorCursorAtBoundary != 'none'"
},
{
"key": "k",
"command": "-notebook.focusPreviousEditor",
"when": "editorTextFocus && inputFocus && notebookEditorFocused && vim.mode == 'Normal' && notebookEditorCursorAtBoundary != 'bottom' && notebookEditorCursorAtBoundary != 'none'"
},
// #endregion
// #region Editor: Completions
{
"key": "ctrl+n",
"command": "workbench.action.files.newUntitledFile",
"when": "!suggestWidgetVisible && !inQuickOpen"
},
{
"key": "ctrl+n",
"command": "-workbench.action.files.newUntitledFile"
},
{
"key": "ctrl+n",
"command": "selectNextSuggestion",
"when": "suggestWidgetMultipleSuggestions && suggestWidgetVisible && textInputFocus || suggestWidgetVisible && textInputFocus && !suggestWidgetHasFocusedSuggestion"
},
{
"key": "ctrl+p",
"command": "selectPrevSuggestion",
"when": "suggestWidgetMultipleSuggestions && suggestWidgetVisible && textInputFocus || suggestWidgetVisible && textInputFocus && !suggestWidgetHasFocusedSuggestion"
},
{
"key": "ctrl+f",
"command": "acceptSelectedSuggestion",
"when": "suggestWidgetVisible && textInputFocus && !inlineSuggestionVisible"
},
{
"key": "alt+f",
"command": "editor.action.inlineSuggest.commit",
"when": "inlineSuggestionVisible && textInputFocus"
},
{
"key": "ctrl+f",
"command": "editor.action.inlineSuggest.acceptNextWord",
"when": "inlineSuggestionVisible && textInputFocus"
},
{
"key": "ctrl+b",
"command": "hideSuggestWidget",
"when": "suggestWidgetVisible && textInputFocus"
},
{
"key": "ctrl+b",
"command": "editor.action.inlineSuggest.hide",
"when": "inlineSuggestionVisible && textInputFocus"
},
// #endregion
// #region Terminal: tmux-like terminal control
{
"key": "cmd+0",
"command": "workbench.action.focusLastEditorGroup",
"when": "terminalFocus"
},
{ // prefix + x : kill terminal
"key": "ctrl+a x",
"command": "workbench.action.terminal.kill",
"when": "terminalFocus"
},
{ // prefix + c : create new terminal
"key": "ctrl+a c",
"command": "workbench.action.terminal.new",
"when": "terminalFocus"
},
{ // prefix + | : split terminal vertically
"key": "ctrl+a shift+\\",
"command": "workbench.action.terminal.split",
"when": "terminalFocus"
},
{ // prefix + \ : split terminal vertically
"key": "ctrl+a \\",
"command": "workbench.action.terminal.split",
"when": "terminalFocus"
},
{ // prefix + / : search
"key": "ctrl+a /",
"command": "workbench.action.terminal.focusFind",
"when": "terminalFocus"
},
{ // prefix + t : toggle terminal
"key": "ctrl+a t",
"command": "workbench.action.terminal.toggleTerminal",
"when": "terminalFocus"
},
{ // prefix + ^a: show information
"key": "ctrl+a ctrl+a",
"command": "workbench.action.terminal.focusHover",
"when": "terminalFocus && terminalHasBeenCreated || terminalFocus && terminalIsOpen || terminalFocus && terminalProcessSupported || terminalHasBeenCreated && terminalTabsFocus || terminalIsOpen && terminalTabsFocus || terminalProcessSupported && terminalTabsFocus"
},
{
"key": "ctrl+k ctrl+i",
"command": "-workbench.action.terminal.focusHover",
"when": "terminalFocus && terminalHasBeenCreated || terminalFocus && terminalIsOpen || terminalFocus && terminalProcessSupported || terminalHasBeenCreated && terminalTabsFocus || terminalIsOpen && terminalTabsFocus || terminalProcessSupported && terminalTabsFocus"
},
{ // prefix + 1 : focus terminal 1
"key": "ctrl+a 1",
"command": "workbench.action.terminal.focusAtIndex1",
"when": "terminalFocus && terminalHasBeenCreated || terminalFocus && terminalIsOpen || terminalFocus && terminalProcessSupported || terminalHasBeenCreated && terminalTabsFocus || terminalIsOpen && terminalTabsFocus || terminalProcessSupported && terminalTabsFocus"
},
{ // prefix + 2 : focus terminal 2
"key": "ctrl+a 2",
"command": "workbench.action.terminal.focusAtIndex2",
"when": "terminalFocus && terminalHasBeenCreated || terminalFocus && terminalIsOpen || terminalFocus && terminalProcessSupported || terminalHasBeenCreated && terminalTabsFocus || terminalIsOpen && terminalTabsFocus || terminalProcessSupported && terminalTabsFocus"
},
{ // prefix + 3 : focus terminal 3
"key": "ctrl+a 3",
"command": "workbench.action.terminal.focusAtIndex3",
"when": "terminalFocus && terminalHasBeenCreated || terminalFocus && terminalIsOpen || terminalFocus && terminalProcessSupported || terminalHasBeenCreated && terminalTabsFocus || terminalIsOpen && terminalTabsFocus || terminalProcessSupported && terminalTabsFocus"
},
{ // prefix + g : Go to recent directory
"key": "ctrl+a g",
"command": "workbench.action.terminal.goToRecentDirectory",
"when": "terminalFocus && terminalHasBeenCreated || terminalFocus && terminalProcessSupported"
},
{
"key": "ctrl+g",
"command": "-workbench.action.terminal.goToRecentDirectory",
"when": "terminalFocus && terminalHasBeenCreated || terminalFocus && terminalProcessSupported"
},
{ // prefix + d : detach terminal
"key": "ctrl+a d",
"command": "workbench.action.terminal.detachSession",
"when": "terminalFocus && terminalHasBeenCreated || terminalFocus && terminalProcessSupported"
},
{ // prefix + a : attach to session
"key": "ctrl+a a",
"command": "workbench.action.terminal.attachToSession",
"when": "terminalFocus"
},
{
"key": "ctrl+a h",
"command": "workbench.action.terminal.focusPreviousPane",
"when": "terminalFocus && terminalHasBeenCreated || terminalFocus && terminalProcessSupported"
},
{
"key": "ctrl+a i",
"command": "workbench.action.terminal.focusNextPane",
"when": "terminalFocus && terminalHasBeenCreated || terminalFocus && terminalProcessSupported"
},
{
"key": "ctrl+a shift+H",
"command": "workbench.action.terminal.resizePaneLeft",
"when": "terminalFocus && terminalHasBeenCreated || terminalFocus && terminalProcessSupported"
},
{
"key": "ctrl+a shift+N",
"command": "workbench.action.terminal.resizePaneDown",
"when": "terminalFocus && terminalHasBeenCreated || terminalFocus && terminalProcessSupported"
},
{
"key": "ctrl+a shift+E",
"command": "workbench.action.terminal.resizePaneUp",
"when": "terminalFocus && terminalHasBeenCreated || terminalFocus && terminalProcessSupported"
},
{
"key": "ctrl+a shift+I",
"command": "workbench.action.terminal.resizePaneRight",
"when": "terminalFocus && terminalHasBeenCreated || terminalFocus && terminalProcessSupported"
},
{
"key": "cmd+`",
"command": "workbench.action.terminal.toggleTerminal",
"when": "terminal.active"
},
{
"key": "ctrl+`",
"command": "-workbench.action.terminal.toggleTerminal",
"when": "terminal.active"
},
// {
// "key": "space",
// "command": "vspacecode.space",
// "when": "activeEditorGroupEmpty && focusedView == '' && !whichkeyActive && !inputFocus"
// },
// {
// "key": "space",
// "command": "vspacecode.space",
// "when": "sideBarFocus && !inputFocus && !whichkeyActive"
// },
{
"key": "tab",
"command": "extension.vim_tab",
"when": "editorTextFocus && vim.active && !inDebugRepl && vim.mode != 'Insert' && editorLangId != 'magit'"
},
{
"key": "tab",
"command": "-extension.vim_tab",
"when": "editorTextFocus && vim.active && !inDebugRepl && vim.mode != 'Insert'"
},
{
"key": "x",
"command": "magit.discard-at-point",
"when": "editorTextFocus && editorLangId == 'magit' && vim.mode =~ /^(?!SearchInProgressMode|CommandlineInProgress).*$/"
},
{
"key": "k",
"command": "-magit.discard-at-point"
},
{
"key": "-",
"command": "magit.reverse-at-point",
"when": "editorTextFocus && editorLangId == 'magit' && vim.mode =~ /^(?!SearchInProgressMode|CommandlineInProgress).*$/"
},
{
"key": "v",
"command": "-magit.reverse-at-point"
},
{
"key": "shift+-",
"command": "magit.reverting",
"when": "editorTextFocus && editorLangId == 'magit' && vim.mode =~ /^(?!SearchInProgressMode|CommandlineInProgress).*$/"
},
{
"key": "shift+v",
"command": "-magit.reverting"
},
{
"key": "shift+o",
"command": "magit.resetting",
"when": "editorTextFocus && editorLangId == 'magit' && vim.mode =~ /^(?!SearchInProgressMode|CommandlineInProgress).*$/"
},
{
"key": "shift+x",
"command": "-magit.resetting"
},
{
"key": "x",
"command": "-magit.reset-mixed"
},
{
"key": "ctrl+u x",
"command": "-magit.reset-hard"
},
{
"key": "y",
"command": "-magit.show-refs"
},
{
"key": "y",
"command": "vspacecode.showMagitRefMenu",
"when": "editorTextFocus && editorLangId == 'magit' && vim.mode == 'Normal'"
},
{
"key": "g",
"command": "-magit.refresh",
"when": "editorTextFocus && editorLangId == 'magit' && vim.mode =~ /^(?!SearchInProgressMode|CommandlineInProgress).*$/"
},
{
"key": "g",
"command": "vspacecode.showMagitRefreshMenu",
"when": "editorTextFocus && editorLangId == 'magit' && vim.mode =~ /^(?!SearchInProgressMode|CommandlineInProgress).*$/"
},
{
"key": "ctrl+j",
"command": "workbench.action.quickOpenSelectNext",
"when": "inQuickOpen"
},
{
"key": "ctrl+k",
"command": "workbench.action.quickOpenSelectPrevious",
"when": "inQuickOpen"
},
{
"key": "ctrl+j",
"command": "selectNextSuggestion",
"when": "suggestWidgetMultipleSuggestions && suggestWidgetVisible && textInputFocus"
},
{
"key": "ctrl+k",
"command": "selectPrevSuggestion",
"when": "suggestWidgetMultipleSuggestions && suggestWidgetVisible && textInputFocus"
},
{
"key": "ctrl+l",
"command": "acceptSelectedSuggestion",
"when": "suggestWidgetMultipleSuggestions && suggestWidgetVisible && textInputFocus"
},
{
"key": "ctrl+j",
"command": "showNextParameterHint",
"when": "editorFocus && parameterHintsMultipleSignatures && parameterHintsVisible"
},
{
"key": "ctrl+k",
"command": "showPrevParameterHint",
"when": "editorFocus && parameterHintsMultipleSignatures && parameterHintsVisible"
},
{
"key": "ctrl+j",
"command": "selectNextCodeAction",
"when": "codeActionMenuVisible"
},
{
"key": "ctrl+k",
"command": "selectPrevCodeAction",
"when": "codeActionMenuVisible"
},
{
"key": "ctrl+l",
"command": "acceptSelectedCodeAction",
"when": "codeActionMenuVisible"
},
{
"key": "ctrl+h",
"command": "file-browser.stepOut",
"when": "inFileBrowser"
},
{
"key": "ctrl+l",
"command": "file-browser.stepIn",
"when": "inFileBrowser"
},
{
"key": "space",
"command": "vspacecode.space",
"when": "activeEditorGroupEmpty && focusedView == '' && !whichkeyActive && !inputFocus"
},
{
"key": "space",
"command": "vspacecode.space",
"when": "sideBarFocus && !inputFocus && !whichkeyActive"
},
// #endregion
// #region Editor: multicursor
{
"key": "alt+e",
"command": "editor.action.insertCursorAbove",
"when": "editorTextFocus"
},
{
"key": "ctrl+alt+up",
"command": "-editor.action.insertCursorAbove",
"when": "editorTextFocus"
},
{
"key": "alt+n",
"command": "editor.action.insertCursorBelow",
"when": "editorTextFocus"
},
{
"key": "ctrl+alt+down",
"command": "-editor.action.insertCursorBelow",
"when": "editorTextFocus"
},
// #endregion
// #region Emacs like Cursor Movements
{ // macOS original C-a will move to BoL, VSCode cursorHome will move to BoL & first non-whitespace character
"key": "ctrl+a",
"command": "cursorHome",
"when": "textInputFocus"
},
// no C-A and C-k C-a to select all, use S-a instead
{
"key": "ctrl+e",
"command": "cursorEnd",
"when": "textInputFocus"
},
{
"key": "alt+b",
"command": "cursorWordStartLeft",
"when": "textInputFocus"
},
{
"key": "alt+f",
"command": "cursorWordStartRight",
"when": "textInputFocus && !inlineEditIsVisible && !suggestWidgetVisible && !inlineSuggestionVisible"
},
// #endregion
// #region Ctrl+W Remaps (Vim-like)
{
"key": "ctrl+w h",
"command": "workbench.action.navigateLeft"
},
{
"key": "ctrl+w ctrl+h",
"command": "workbench.action.toggleSidebarVisibility"
},
{
"key": "ctrl+w i",
"command": "workbench.action.navigateRight"
},
{
"key": "ctrl+w ctrl+i",
"command": "workbench.action.toggleAuxiliaryBar"
},
{
"key": "ctrl+w n",
"command": "workbench.action.navigateDown"
},
{
"key": "ctrl+w ctrl+n",
"command": "workbench.action.togglePanel"
},
{
"key": "ctrl+w e",
"command": "workbench.action.navigateUp"
},
{ // original ^w
"key": "ctrl+w ctrl+w",
"command": "workbench.action.closeActiveEditor",
"when": "editorFocus || inSettingsEditor || inKeybindings || inWelcome"
},
{ // :only
"key": "ctrl+w o",
"command": "runCommands",
"args": {
"commands": [
"workbench.action.joinAllGroups",
"workbench.action.maximizeEditorHideSidebar"
]
}
},
{
"key": "ctrl+w ctrl+w",
"command": "workbench.action.closeGroup",
"when": "activeEditorGroupEmpty && multipleEditorGroups"
},
{
"key": "ctrl+w",
"command": "-workbench.action.closeGroup",
"when": "activeEditorGroupEmpty && multipleEditorGroups"
},
// #endregion
// #region Extension: VSpaceCode
{
"key": "alt+q",
"command": "vspacecode.space"
},
// #endregion
// #region Sidebar: Search View
{ // Focus on search list, therefore can use n/e to move up/down
"key": "escape",
"command": "search.action.focusSearchList",
"when": "searchViewletFocus && inputBoxFocus"
},
{ // Focus on main input box
"key": "l",
"command": "workbench.action.replaceInFiles",
"when": "searchViewletFocus && !inputBoxFocus"
},
{
"key": "r",
"command": "toggleSearchRegex",
"when": "searchViewletFocus && !inputBoxFocus"
},
{
"key": "w",
"command": "toggleSearchWholeWord",
"when": "searchViewletFocus && !inputBoxFocus"
},
{
"key": "c",
"command": "toggleSearchCaseSensitive",
"when": "searchViewletFocus && !inputBoxFocus"
},
{
"key": "p",
"command": "toggleSearchPreserveCase",
"when": "searchViewletFocus && !inputBoxFocus"
},
{
"key": "i",
"command": "search.action.focusFilesToInclude",
"when": "searchViewletFocus && !inputBoxFocus"
},
{
"key": "shift+e",
"command": "search.action.focusFilesToExclude",
"when": "searchViewletFocus && !inputBoxFocus"
},
// #endregion
// #region Miscs and todos
// #endregion
]

View file

@ -0,0 +1,920 @@
// Place your key bindings in this file to override the defaults
[
// #region Panel
{
"key": "ctrl+p",
"command": "workbench.action.quickOpen",
"when": "!terminalFocus"
},
{
"key": "ctrl+p",
"command": "workbench.action.quickOpenNavigatePrevious",
"when": "inQuickOpen"
},
{
"key": "ctrl+n",
"command": "workbench.action.quickOpenNavigateNext",
"when": "inQuickOpen"
},
{
"key": "ctrl+[",
"command": "workbench.action.closeQuickOpen",
"when": "inQuickOpen"
},
{ // Emacs-like
"key": "ctrl+g",
"command": "workbench.action.closeQuickOpen",
"when": "inQuickOpen"
},
{ // Emacs-like: M-x to show command palette
"key": "alt+x",
"command": "workbench.action.showCommands"
},
// #endregion
// #region Extension: Code Runner
{
"key": "ctrl+alt+n",
"command": "-code-runner.run"
},
// #endregion
// #region Comment and semicolons
{
"key": "ctrl+oem_1", // ctrl+;
"command": "extension.insertSemicolon",
"when": "editorTextFocus"
},
{ // change to toggle comment
"key": "ctrl+oem_2", // ctrl+/;
"command": "-extension.insertSemicolon",
"when": "editorTextFocus"
},
{
"key": "ctrl+shift+oem_1",
"command": "extension.insertSemicolonWithNewLine",
"when": "editorTextFocus"
},
{
"key": "ctrl+shift+oem_2",
"command": "-extension.insertSemicolonWithNewLine",
"when": "editorTextFocus"
},
{
"key": "ctrl+shift+oem_2",
"command": "github.copilot.acceptCursorPanelSolution",
"when": "github.copilot.activated && github.copilot.panelVisible"
},
{
"key": "ctrl+oem_2",
"command": "-github.copilot.acceptCursorPanelSolution",
"when": "github.copilot.activated && github.copilot.panelVisible"
},
// #endregion
// #region Nvim-Tree like File Explorer
// n, e : move cursor up/down
// h : move cursor to parent folder
// i : open file or folder
{
"key": "e",
"command": "list.focusUp",
"when": "notebookEditorFocused && !inputFocus && !notebookOutputInputFocused"
},
{
"key": "k",
"command": "-list.focusUp",
"when": "notebookEditorFocused && !inputFocus && !notebookOutputInputFocused"
},
{
"key": "e",
"command": "list.focusUp",
"when": "listFocus && !inputFocus"
},
{
"key": "k",
"command": "-list.focusUp",
"when": "listFocus && !inputFocus"
},
{
"key": "f",
"command": "filesExplorer.findInWorkspace",
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
{
"key": "n",
"command": "list.focusDown",
"when": "listFocus && !inputFocus"
},
{
"key": "j",
"command": "-list.focusDown",
"when": "listFocus && !inputFocus"
},
{
"key": "i",
"command": "list.select",
"when": "listFocus && !inputFocus"
},
{
"key": "l",
"command": "-list.select",
"when": "listFocus && !inputFocus"
},
{ // ctrl-w enter: open in vertical split / to side
"key": "ctrl+w enter",
"command": "explorer.openToSide",
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
{ // z: Close all folders
"key": "z",
"command": "workbench.files.action.collapseExplorerFolders",
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
{ // <leader>e: Close left sidebar if is in file explorer
"key": "space e",
"command": "workbench.action.toggleSidebarVisibility",
"when": "sideBarFocus && !inputFocus && !searchViewletVisible && filesExplorerFocus"
},
{ // <leader>e: Focus on file explorer if is on sidebar and not in file explorer
"key": "space e",
"command": "workbench.files.action.focusFilesExplorer",
"when": "sideBarFocus && !inputFocus && !searchViewletVisible && !filesExplorerFocus"
},
{ // <leader>g: Focus on file explorer if is on sidebar and not in file explorer
"key": "space g",
"command": "workbench.scm.focus",
"when": "sideBarFocus && !inputFocus && !searchViewletVisible && !scmViewletVisible"
},
{ // a: add
"key": "a",
"command": "explorer.newFile",
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
{ // p: paste
"key": "p",
"command": "filesExplorer.paste",
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
{ // x: cut
"key": "x",
"command": "filesExplorer.cut",
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
{ // d: delete
"key": "d",
"command": "deleteFile",
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
{ // r: rename
"key": "r",
"command": "renameFile",
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
{ // s: open in vertical split / to side
"key": "s",
"command": "explorer.openToSide",
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
{ // A: add folder
"key": "shift+a",
"command": "explorer.newFolder",
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
{ // C: Copy path
"key": "shift+c",
"command": "copyFilePath",
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
{ // E: Open in File Explorer
"key": "shift+e",
"command": "revealFileInOS",
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
{ // E: Open in File Explorer (WSL)
"key": "shift+e",
"command": "remote-wsl.revealInExplorer",
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus && remoteName == 'wsl'"
},
{ // O: Open with System App
"key": "shift+o",
"command": "openInExternalApp.open",
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
{ // Y: Copy Relative Path
"key": "shift+y",
"command": "copyRelativeFilePath",
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
{ // R: Copy Relative Path
"key": "shift+r",
"command": "workbench.files.action.refreshFilesExplorer",
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
{ // T: Open in terminal
"key": "shift+t",
"command": "openInIntegratedTerminal",
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
// #endregion
// #region Vim-like Hover Browsing
{
"key": "h",
"command": "editor.action.scrollLeftHover",
"when": "editorHoverFocused"
},
{
"key": "n",
"command": "editor.action.scrollDownHover",
"when": "editorHoverFocused"
},
{
"key": "e",
"command": "editor.action.scrollUpHover",
"when": "editorHoverFocused"
},
{
"key": "i",
"command": "editor.action.scrollRightHover",
"when": "editorHoverFocused"
},
// #endregion
// #region Vim-like Jupyter Navigation
{
"key": "n",
"command": "notebook.focusNextEditor",
"when": "editorTextFocus && inputFocus && notebookEditorFocused && vim.mode == 'Normal' && notebookEditorCursorAtBoundary != 'none' && notebookEditorCursorAtBoundary != 'top'"
},
{
"key": "j",
"command": "-notebook.focusNextEditor",
"when": "editorTextFocus && inputFocus && notebookEditorFocused && vim.mode == 'Normal' && notebookEditorCursorAtBoundary != 'none' && notebookEditorCursorAtBoundary != 'top'"
},
{
"key": "e",
"command": "notebook.focusPreviousEditor",
"when": "editorTextFocus && inputFocus && notebookEditorFocused && vim.mode == 'Normal' && notebookEditorCursorAtBoundary != 'bottom' && notebookEditorCursorAtBoundary != 'none'"
},
{
"key": "k",
"command": "-notebook.focusPreviousEditor",
"when": "editorTextFocus && inputFocus && notebookEditorFocused && vim.mode == 'Normal' && notebookEditorCursorAtBoundary != 'bottom' && notebookEditorCursorAtBoundary != 'none'"
},
// #endregion
// #region Git / Source Control
// { // Alt+Enter: Send Commit when editing commit message
// "key": "alt+enter",
// "command": "git.commitMessageAccept",
// "when": "editorLangId=\"git-commit\""
// },
{
"key": "ctrl+shift+g c",
"command": "-gitlens.showQuickCommitFileDetails",
"when": "editorTextFocus && !gitlens:disabled && config.gitlens.keymap == 'chorded'"
},
{
"key": "ctrl+shift+g s",
"command": "git.stageAll"
},
{
"key": "ctrl+shift+g g",
"command": "workbench.view.scm",
"when": "workbench.scm.active"
},
{
"key": "ctrl+shift+g",
"command": "-workbench.view.scm",
"when": "workbench.scm.active"
},
{
"key": "ctrl+k ctrl+shift+b",
"command": "editor.action.goToSelectionAnchor"
},
{
"key": "ctrl+k ctrl+shift+i",
"command": "workbench.action.selectProductIconTheme"
},
{
"key": "ctrl+l p",
"command": "-extension.openPrGitProvider"
},
{
"key": "ctrl+l g",
"command": "-extension.openInGitHub"
},
{
"key": "ctrl+l c",
"command": "-extension.copyGitHubLinkToClipboard"
},
// #endregion
// #region Use ^pbnf to navigate completions
{
"key": "ctrl+n",
"command": "workbench.action.files.newUntitledFile",
"when": "!suggestWidgetVisible && !inQuickOpen"
},
{
"key": "ctrl+n",
"command": "-workbench.action.files.newUntitledFile"
},
{
"key": "ctrl+n",
"command": "selectNextSuggestion",
"when": "suggestWidgetMultipleSuggestions && suggestWidgetVisible && textInputFocus || suggestWidgetVisible && textInputFocus && !suggestWidgetHasFocusedSuggestion"
},
{
"key": "ctrl+p",
"command": "selectPrevSuggestion",
"when": "suggestWidgetMultipleSuggestions && suggestWidgetVisible && textInputFocus || suggestWidgetVisible && textInputFocus && !suggestWidgetHasFocusedSuggestion"
},
{
"key": "ctrl+f",
"command": "acceptSelectedSuggestion",
"when": "suggestWidgetVisible && textInputFocus && !inlineSuggestionVisible"
},
{
"key": "alt+f",
"command": "editor.action.inlineSuggest.commit",
"when": "inlineSuggestionVisible && textInputFocus"
},
{
"key": "ctrl+f",
"command": "editor.action.inlineSuggest.acceptNextWord",
"when": "inlineSuggestionVisible && textInputFocus"
},
{
"key": "ctrl+b",
"command": "hideSuggestWidget",
"when": "suggestWidgetVisible && textInputFocus"
},
{
"key": "ctrl+b",
"command": "editor.action.inlineSuggest.hide",
"when": "inlineSuggestionVisible && textInputFocus"
},
// #endregion
// #region Terminal Control, use ^a as prefix / leader key
// tmux-like terminal control
{ // prefix + x : kill terminal
"key": "ctrl+a space",
"command": "vspacecode.space",
"when": "terminalFocus"
},
{ // prefix + x : kill terminal
"key": "ctrl+a x",
"command": "workbench.action.terminal.kill",
"when": "terminalFocus"
},
{ // prefix + c : create new terminal
"key": "ctrl+a c",
"command": "workbench.action.terminal.new",
"when": "terminalFocus"
},
{ // prefix + | : split terminal vertically
"key": "ctrl+a shift+\\",
"command": "workbench.action.terminal.split",
"when": "terminalFocus"
},
{ // prefix + \ : split terminal vertically
"key": "ctrl+a \\",
"command": "workbench.action.terminal.split",
"when": "terminalFocus"
},
{ // prefix + / : search
"key": "ctrl+a /",
"command": "workbench.action.terminal.focusFind",
"when": "terminalFocus"
},
{ // prefix + t : toggle terminal
"key": "ctrl+a t",
"command": "workbench.action.terminal.toggleTerminal",
"when": "terminalFocus"
},
{ // prefix + ^a: show information
"key": "ctrl+a a",
"command": "workbench.action.terminal.focusHover",
"when": "terminalFocus && terminalHasBeenCreated || terminalFocus && terminalIsOpen || terminalFocus && terminalProcessSupported || terminalHasBeenCreated && terminalTabsFocus || terminalIsOpen && terminalTabsFocus || terminalProcessSupported && terminalTabsFocus"
},
{
"key": "ctrl+k ctrl+i",
"command": "-workbench.action.terminal.focusHover",
"when": "terminalFocus && terminalHasBeenCreated || terminalFocus && terminalIsOpen || terminalFocus && terminalProcessSupported || terminalHasBeenCreated && terminalTabsFocus || terminalIsOpen && terminalTabsFocus || terminalProcessSupported && terminalTabsFocus"
},
{ // prefix + 1 : focus terminal 1
"key": "ctrl+a 1",
"command": "workbench.action.terminal.focusAtIndex1",
"when": "terminalFocus && terminalHasBeenCreated || terminalFocus && terminalIsOpen || terminalFocus && terminalProcessSupported || terminalHasBeenCreated && terminalTabsFocus || terminalIsOpen && terminalTabsFocus || terminalProcessSupported && terminalTabsFocus"
},
{ // prefix + 2 : focus terminal 2
"key": "ctrl+a 2",
"command": "workbench.action.terminal.focusAtIndex2",
"when": "terminalFocus && terminalHasBeenCreated || terminalFocus && terminalIsOpen || terminalFocus && terminalProcessSupported || terminalHasBeenCreated && terminalTabsFocus || terminalIsOpen && terminalTabsFocus || terminalProcessSupported && terminalTabsFocus"
},
{ // prefix + 3 : focus terminal 3
"key": "ctrl+a 3",
"command": "workbench.action.terminal.focusAtIndex3",
"when": "terminalFocus && terminalHasBeenCreated || terminalFocus && terminalIsOpen || terminalFocus && terminalProcessSupported || terminalHasBeenCreated && terminalTabsFocus || terminalIsOpen && terminalTabsFocus || terminalProcessSupported && terminalTabsFocus"
},
{ // prefix + g : Go to recent directory
"key": "ctrl+a g",
"command": "workbench.action.terminal.goToRecentDirectory",
"when": "terminalFocus && terminalHasBeenCreated || terminalFocus && terminalProcessSupported"
},
{
"key": "ctrl+g",
"command": "-workbench.action.terminal.goToRecentDirectory",
"when": "terminalFocus && terminalHasBeenCreated || terminalFocus && terminalProcessSupported"
},
{ // prefix + d : detach terminal
"key": "ctrl+a d",
"command": "workbench.action.terminal.detachSession",
"when": "terminalFocus && terminalHasBeenCreated || terminalFocus && terminalProcessSupported"
},
{ // prefix + a : attach to session
"key": "ctrl+a a",
"command": "workbench.action.terminal.attachToSession",
"when": "terminalFocus"
},
{
"key": "ctrl+a h",
"command": "workbench.action.terminal.focusPreviousPane",
"when": "terminalFocus && terminalHasBeenCreated || terminalFocus && terminalProcessSupported"
},
{
"key": "ctrl+a i",
"command": "workbench.action.terminal.focusNextPane",
"when": "terminalFocus && terminalHasBeenCreated || terminalFocus && terminalProcessSupported"
},
{
"key": "ctrl+a shift+H",
"command": "workbench.action.terminal.resizePaneLeft",
"when": "terminalFocus && terminalHasBeenCreated || terminalFocus && terminalProcessSupported"
},
{
"key": "ctrl+a shift+N",
"command": "workbench.action.terminal.resizePaneDown",
"when": "terminalFocus && terminalHasBeenCreated || terminalFocus && terminalProcessSupported"
},
{
"key": "ctrl+a shift+E",
"command": "workbench.action.terminal.resizePaneUp",
"when": "terminalFocus && terminalHasBeenCreated || terminalFocus && terminalProcessSupported"
},
{
"key": "ctrl+a shift+I",
"command": "workbench.action.terminal.resizePaneRight",
"when": "terminalFocus && terminalHasBeenCreated || terminalFocus && terminalProcessSupported"
},
// #endregion
// #region Misc
{
"key": "ctrl+p",
"command": "workbench.action.files.openFileFolder",
"when": "isMacNative && openFolderWorkspaceSupport"
},
{
"key": "ctrl+o",
"command": "-workbench.action.files.openFileFolder",
"when": "isMacNative && openFolderWorkspaceSupport"
},
{
"key": "ctrl+p",
"command": "-extension.vim_ctrl+p",
"when": "editorTextFocus && vim.active && vim.use<C-p> && !inDebugRepl || vim.active && vim.use<C-p> && !inDebugRepl && vim.mode == 'CommandlineInProgress' || vim.active && vim.use<C-p> && !inDebugRepl && vim.mode == 'SearchInProgressMode'"
},
{
"key": "ctrl+o",
"command": "-workbench.action.files.openFolderViaWorkspace",
"when": "!openFolderWorkspaceSupport && workbenchState == 'workspace'"
},
{
"key": "f9",
"command": "csdevkit.debug.noDebugFileLaunch"
},
{
"key": "ctrl+h",
"command": "-editor.action.startFindReplaceAction",
"when": "editorFocus || editorIsOpen"
},
{
"key": "ctrl+h",
"command": "-extension.vim_ctrl+h",
"when": "editorTextFocus && vim.active && vim.use<C-h> && !inDebugRepl"
},
{
"key": "ctrl+r",
"command": "-workbench.action.reloadWindow",
"when": "isDevelopment"
},
{
"key": "ctrl+alt+r",
"command": "-workbench.action.terminal.runRecentCommand",
"when": "terminalFocus && terminalHasBeenCreated && !accessibilityModeEnabled || terminalFocus && terminalProcessSupported && !accessibilityModeEnabled"
},
{
"key": "ctrl+r",
"command": "-workbench.action.terminal.runRecentCommand",
"when": "accessibilityModeEnabled && terminalFocus && terminalHasBeenCreated || accessibilityModeEnabled && terminalFocus && terminalProcessSupported || accessibilityModeEnabled && accessibleViewIsShown && terminalHasBeenCreated && accessibleViewCurrentProviderId == 'terminal' || accessibilityModeEnabled && accessibleViewIsShown && terminalProcessSupported && accessibleViewCurrentProviderId == 'terminal'"
},
{
"key": "ctrl+shift+r",
"command": "-rerunSearchEditorSearch",
"when": "inSearchEditor"
},
{
"key": "ctrl+shift+r",
"command": "-editor.action.refactor",
"when": "editorHasCodeActionsProvider && textInputFocus && !editorReadonly"
},
{
"key": "ctrl+shift+r",
"command": "workbench.action.quickOpenNavigatePreviousInRecentFilesPicker",
"when": "inQuickOpen && inRecentFilesPicker"
},
{
"key": "ctrl+shift+l",
"command": "cursorLineStart",
"when": "textInputFocus"
},
{
"key": "space",
"command": "vspacecode.space",
"when": "activeEditorGroupEmpty && focusedView == '' && !whichkeyActive && !inputFocus"
},
{
"key": "space",
"command": "vspacecode.space",
"when": "sideBarFocus && !inputFocus && !whichkeyActive"
},
{
"key": "tab",
"command": "extension.vim_tab",
"when": "editorTextFocus && vim.active && !inDebugRepl && vim.mode != 'Insert' && editorLangId != 'magit'"
},
{
"key": "tab",
"command": "-extension.vim_tab",
"when": "editorTextFocus && vim.active && !inDebugRepl && vim.mode != 'Insert'"
},
{
"key": "x",
"command": "magit.discard-at-point",
"when": "editorTextFocus && editorLangId == 'magit' && vim.mode =~ /^(?!SearchInProgressMode|CommandlineInProgress).*$/"
},
{
"key": "k",
"command": "-magit.discard-at-point"
},
{
"key": "-",
"command": "magit.reverse-at-point",
"when": "editorTextFocus && editorLangId == 'magit' && vim.mode =~ /^(?!SearchInProgressMode|CommandlineInProgress).*$/"
},
{
"key": "v",
"command": "-magit.reverse-at-point"
},
{
"key": "shift+-",
"command": "magit.reverting",
"when": "editorTextFocus && editorLangId == 'magit' && vim.mode =~ /^(?!SearchInProgressMode|CommandlineInProgress).*$/"
},
{
"key": "shift+v",
"command": "-magit.reverting"
},
{
"key": "shift+o",
"command": "magit.resetting",
"when": "editorTextFocus && editorLangId == 'magit' && vim.mode =~ /^(?!SearchInProgressMode|CommandlineInProgress).*$/"
},
{
"key": "shift+x",
"command": "-magit.resetting"
},
{
"key": "x",
"command": "-magit.reset-mixed"
},
{
"key": "ctrl+u x",
"command": "-magit.reset-hard"
},
{
"key": "y",
"command": "-magit.show-refs"
},
{
"key": "y",
"command": "vspacecode.showMagitRefMenu",
"when": "editorTextFocus && editorLangId == 'magit' && vim.mode == 'Normal'"
},
{
"key": "g",
"command": "-magit.refresh",
"when": "editorTextFocus && editorLangId == 'magit' && vim.mode =~ /^(?!SearchInProgressMode|CommandlineInProgress).*$/"
},
{
"key": "g",
"command": "vspacecode.showMagitRefreshMenu",
"when": "editorTextFocus && editorLangId == 'magit' && vim.mode =~ /^(?!SearchInProgressMode|CommandlineInProgress).*$/"
},
{
"key": "ctrl+j",
"command": "workbench.action.quickOpenSelectNext",
"when": "inQuickOpen"
},
{
"key": "ctrl+k",
"command": "workbench.action.quickOpenSelectPrevious",
"when": "inQuickOpen"
},
{
"key": "ctrl+j",
"command": "selectNextSuggestion",
"when": "suggestWidgetMultipleSuggestions && suggestWidgetVisible && textInputFocus"
},
{
"key": "ctrl+k",
"command": "selectPrevSuggestion",
"when": "suggestWidgetMultipleSuggestions && suggestWidgetVisible && textInputFocus"
},
{
"key": "ctrl+l",
"command": "acceptSelectedSuggestion",
"when": "suggestWidgetMultipleSuggestions && suggestWidgetVisible && textInputFocus"
},
{
"key": "ctrl+j",
"command": "showNextParameterHint",
"when": "editorFocus && parameterHintsMultipleSignatures && parameterHintsVisible"
},
{
"key": "ctrl+k",
"command": "showPrevParameterHint",
"when": "editorFocus && parameterHintsMultipleSignatures && parameterHintsVisible"
},
{
"key": "ctrl+j",
"command": "selectNextCodeAction",
"when": "codeActionMenuVisible"
},
{
"key": "ctrl+k",
"command": "selectPrevCodeAction",
"when": "codeActionMenuVisible"
},
{
"key": "ctrl+l",
"command": "acceptSelectedCodeAction",
"when": "codeActionMenuVisible"
},
{
"key": "ctrl+h",
"command": "file-browser.stepOut",
"when": "inFileBrowser"
},
{
"key": "ctrl+l",
"command": "file-browser.stepIn",
"when": "inFileBrowser"
},
{
"key": "ctrl+oem_4",
"command": "whichkey.undoKey",
"when": "whichkeyVisible"
},
{
"key": "alt+e",
"command": "editor.action.insertCursorAbove",
"when": "editorTextFocus"
},
{
"key": "ctrl+alt+up",
"command": "-editor.action.insertCursorAbove",
"when": "editorTextFocus"
},
{
"key": "alt+n",
"command": "editor.action.insertCursorBelow",
"when": "editorTextFocus"
},
{
"key": "ctrl+alt+down",
"command": "-editor.action.insertCursorBelow",
"when": "editorTextFocus"
},
// #endregion
// #region Ctrl+W Remaps (Vim-like)
{
"key": "ctrl+w h",
"command": "workbench.action.navigateLeft"
},
{
"key": "ctrl+w ctrl+h",
"command": "workbench.action.toggleSidebarVisibility"
},
{
"key": "ctrl+w l",
"command": "workbench.action.navigateRight"
},
{
"key": "ctrl+w ctrl+l",
"command": "workbench.action.toggleAuxiliaryBar"
},
{
"key": "ctrl+w j",
"command": "workbench.action.navigateDown"
},
{
"key": "ctrl+w ctrl+j",
"command": "workbench.action.togglePanel"
},
{
"key": "ctrl+w k",
"command": "workbench.action.navigateUp"
},
{ // original ^w
"key": "ctrl+w ctrl+w",
"command": "workbench.action.closeActiveEditor",
"when": "editorFocus || inSettingsEditor || inKeybindings || inWelcome"
},
{ // :only
"key": "ctrl+w o",
"command": "runCommands",
"args": {
"commands": [
"workbench.action.joinAllGroups",
"workbench.action.maximizeEditorHideSidebar"
]
}
},
{ // :only
"key": "ctrl+w ctrl+o",
"command": "runCommands",
"args": {
"commands": [
"workbench.action.joinAllGroups",
"workbench.action.maximizeEditorHideSidebar"
]
}
},
{
"key": "ctrl+w ctrl+w",
"command": "workbench.action.closeGroup",
"when": "activeEditorGroupEmpty && multipleEditorGroups"
},
{
"key": "ctrl+w",
"command": "-workbench.action.closeGroup",
"when": "activeEditorGroupEmpty && multipleEditorGroups"
},
{
"key": "ctrl+w d",
"command": "editor.action.revealDefinitionAside"
},
// #endregion
// #region Emacs like Cursor Movement
{
"key": "ctrl+f",
"command": "cursorRight",
"when": "textInputFocus && !inlineEditIsVisible && !suggestWidgetVisible && !inlineSuggestionVisible"
},
{
"key": "ctrl+b",
"command": "cursorLeft",
"when": "textInputFocus && !inlineEditIsVisible && !suggestWidgetVisible && !inlineSuggestionVisible"
},
{
"key": "ctrl+n",
"command": "cursorDown",
"when": "textInputFocus && !suggestWidgetVisible && !inQuickOpen"
},
{
"key": "ctrl+p",
"command": "cursorUp",
"when": "textInputFocus && !suggestWidgetVisible && !inQuickOpen"
},
{
"key": "ctrl+a",
"command": "cursorHome",
"when": "textInputFocus"
},
{
"key": "ctrl+shift+a",
"command": "cursorEnd",
"when": "editor.action.selectAll"
},
{
"key": "ctrl+k ctrl+a",
"command": "editor.action.selectAll"
},
{
"key": "ctrl+e",
"command": "cursorEnd",
"when": "textInputFocus"
},
{
"key": "alt+b",
"command": "cursorWordStartLeft",
"when": "textInputFocus"
},
{
"key": "alt+f",
"command": "cursorWordStartRight",
"when": "textInputFocus && !inlineEditIsVisible && !suggestWidgetVisible && !inlineSuggestionVisible"
},
// #endregion
{
"key": "alt+q",
"command": "vspacecode.space"
},
// #region Search View
{ // Focus on search list, therefore can use n/e to move up/down
"key": "escape",
"command": "search.action.focusSearchList",
"when": "searchViewletFocus && inputBoxFocus"
},
{ // Focus on main input box
"key": "l",
"command": "workbench.action.replaceInFiles",
"when": "searchViewletFocus && !inputBoxFocus"
},
{
"key": "r",
"command": "toggleSearchRegex",
"when": "searchViewletFocus && !inputBoxFocus"
},
{
"key": "w",
"command": "toggleSearchWholeWord",
"when": "searchViewletFocus && !inputBoxFocus"
},
{
"key": "c",
"command": "toggleSearchCaseSensitive",
"when": "searchViewletFocus && !inputBoxFocus"
},
{
"key": "p",
"command": "toggleSearchPreserveCase",
"when": "searchViewletFocus && !inputBoxFocus"
},
{
"key": "i",
"command": "search.action.focusFilesToInclude",
"when": "searchViewletFocus && !inputBoxFocus"
},
{
"key": "shift+e",
"command": "search.action.focusFilesToExclude",
"when": "searchViewletFocus && !inputBoxFocus"
},
{
"key": "shift+alt+3",
"command": "editor.action.commentLine",
"when": "editorTextFocus && !editorReadonly"
},
{
"key": "ctrl+/",
"command": "-editor.action.commentLine",
"when": "editorTextFocus && !editorReadonly"
},
// #endregion
//#region Debugger
{
"key": "c",
"command": "workbench.action.debug.continue",
"when": "inDebugMode && debugState == 'stopped' && vim.mode == 'Normal' && editorFocus"
},
{
"key": "t",
"command": "workbench.action.debug.stepInto",
"when": "inDebugMode && debugState == 'stopped' && vim.mode == 'Normal' && editorFocus"
},
{
"key": "s",
"command": "workbench.action.debug.stepOver",
"when": "inDebugMode && debugState == 'stopped' && vim.mode == 'Normal' && editorFocus"
},
{
"key": "r",
"command": "workbench.action.debug.restart",
"when": "inDebugMode && debugState == 'stopped' && vim.mode == 'Normal' && editorFocus"
},
{
"key": "g c",
"command": "editor.debug.action.runToCursor",
"when": "inDebugMode && debugState == 'stopped' && vim.mode == 'Normal' && editorFocus"
},
{
"key": "g h",
"command": "editor.debug.action.showDebugHover",
"when": "inDebugMode && debugState == 'stopped' && vim.mode == 'Normal' && editorFocus"
},
{
"key": "ctrl+w f",
"command": "search.action.openNewEditorToSide"
},
{
"key": "ctrl+k ctrl+shift+c",
"command": "vspacecode.copyFilenameBase"
}
]

View file

@ -0,0 +1,173 @@
" ~/.config/vscode/vscode.vimrc
" New-Item -ItemType SymbolicLink -Path ~\.config\vscode\vscode.vimrc -Target ~\.dotfiles\vscode\vscode.vimrc
" ln -sf $DOTFILES/vscode/vscode.vimrc $XDG_CONFIG_HOME/vscode/vscode.vimrc
" And go to vscode vim setting:
"vim.vimrc.path": "$HOME/.config/vscode/vscode.vimrc",
" Arrow remap
noremap n j
noremap e k
noremap i l
" Switch between tabs
noremap H :bprevious<CR>
noremap I :bnext<CR>
noremap N 5j
noremap E 5k
" Similar position to i
" The `noremap` implements text-object-like behavior in VSCodeVim
noremap l i
noremap L I
" ne[k]st
noremap k n
noremap K N
" [j]ump
noremap j e
noremap J E
" Y to yank to end of line
noremap Y y$
" Define in settings.json, since this will remap <esc> under visual mode
" noremap <esc> :nohlsearch<CR>
" 分词版本的w和b支持中文需要插件
" 为了保证递归解析,而不是打断,使用 `nmap` 而不是 `nnoremap`
" Comment if you don't use cjk or the plugin
nmap w cjkWordHandler.cursorWordEndRight
nmap b cjkWordHandler.cursorWordStartLeft
" keep selection after indent (define in settings.json)
" voremap < <gv
" voremap > >gv
" lsp
noremap gi editor.action.goToImplementation
noremap gpi editor.action.peekImplementation
noremap gd editor.action.goToDefinition
noremap gpd editor.action.peekDefinition
noremap gt editor.action.goToTypeDefinition
noremap gpt editor.action.peekTypeDefinition
noremap gh editor.action.showDefinitionPreviewHover
noremap gr editor.action.goToReferences
noremap gpr editor.action.referenceSearch.trigger
noremap zR editor.foldAll
noremap <leader><leader> workbench.action.quickOpen
noremap <leader>/ workbench.action.quickTextSearch
noremap <leader>: workbench.action.showCommands
noremap <leader>E workbench.view.explorer
noremap <leader>- workbench.action.splitEditorDown
noremap <leader>| workbench.action.splitEditorRight
noremap <leader>\ workbench.action.splitEditorRight
" <leader>a : +ai/action
noremap <leader>aa inlineChat.start
noremap <leader>aA workbench.panel.chat
noremap <leader>ae workbench.action.chat.openEditSession
" <leader>b : +buffer
noremap <leader>bb workbench.action.showAllEditors
noremap <leader>bd :bdelete<CR>
noremap <leader>bh :bprevious<CR>
noremap <leader>bi :bnext<CR>
noremap <leader>bp :bprevious<CR>
noremap <leader>bn :bnext<CR>
" <leader>c : +code/compile
noremap <leader>cr code-runner.run
noremap <leader>cf editor.action.formatDocument
noremap <leader>c<leader> editor.action.trimTrailingWhitespace
noremap <leader>cs workbench.action.gotoSymbol
noremap <leader>cS workbench.action.showAllSymbols
noremap <leader>ce editor.action.marker.next
noremap <leader>cE editor.action.marker.prev
noremap <leader>cg editor.action.dirtydiff.next
noremap <leader>cG editor.action.dirtydiff.previous
noremap <leader>cR editor.action.rename
" <leader>d : +debug
" <leader>f : +file
noremap <leader>ff workbench.action.quickOpen
noremap <leader>fF workbench.view.search
noremap <leader>fc workbench.action.openSettings
noremap <leader>fC workbench.action.openFolderSettingsFile
noremap <leader>fe workbench.view.explorer
noremap <leader>fo openInExternalApp.open
noremap <leader>fr workbench.action.showAllEditorsByMostRecentlyUsed
" Can only rename tracked files
noremap <leader>fR git.rename
" noremap <leader>fs workbench.action.search.toggleQueryDetails
noremap <leader>ft workbench.action.terminal.toggleTerminal
noremap <leader>fx workbench.view.extensions
" <leader>g : +git
noremap <leader>gg workbench.view.scm
noremap <leader>gS git.stageAll
" <leader>h : +help
" <leader>j : +jump
noremap <leader>jj workbench.action.gotoLine
" <leader>l : +language (define in settings.json)
" <leader>p : +project (requires Project Manager extension)
noremap <leader>pp projectManager.listProjects
noremap <leader>pP projectManager.listAnyProjects#sideBarAny
noremap <leader>pc projectManager.openSettings#sideBarAny
noremap <leader>pe projectManager.editProjects
noremap <leader>pf projectManager.addToFavorites
noremap <leader>pF projectManager.filterProjectsByTag
noremap <leader>pg projectManager.listGitProjects#sideBarGit
noremap <leader>pr workbench.action.openRecent
noremap <leader>ps projectManager.saveProject
" <leader>q : +quit
noremap <leader>qq :quit<CR>
noremap <leader>qQ :qall<CR>
noremap <leader>Q :quit<CR>
" <leader>r : +refactor
" <leader>s : +search
" <leader>t : +test
noremap <leader>tt testing.runAll
noremap <leader>tT testing.debugAll
noremap <leader>ta testing.runAll
noremap <leader>tA testing.debugAll
noremap <leader>tf testing.reRunFailedTests
noremap <leader>tF testing.debugFailedTests
noremap <leader>tl testing.reRunLastRun
noremap <leader>tL testing.debugLastRun
noremap <leader>tc testing.runCurrentTest
noremap <leader>tC testing.debugCurrentTest
noremap <leader>tx testing.cancelTestRun
" <leader>u : +ui
noremap <leader>ui workbench.action.selectTheme
noremap <leader>uw editor.action.toggleWordWrap
noremap <leader>uz workbench.action.toggleZenMode
" <leader>w : +write/window
noremap <leader>ww :write<CR>
noremap <leader>wa :wall<CR>
noremap <leader>wq :wq<CR>
noremap <leader>W :write<CR>
noremap <leader>wh workbench.action.focusLeftGroup
noremap <leader>wH workbench.action.splitEditorLeft
noremap <leader>wn workbench.action.focusBelowGroup
noremap <leader>wN workbench.action.splitEditorDown
noremap <leader>we workbench.action.focusAboveGroup
noremap <leader>wE workbench.action.splitEditorUp
noremap <leader>wi workbench.action.focusRightGroup
noremap <leader>wI workbench.action.splitEditorRight
noremap <leader>w- workbench.action.splitEditorDown
noremap <leader>w| workbench.action.splitEditorRight
noremap <leader>w\ workbench.action.splitEditorRight

79
misc/vscode/vscode.vimrc Normal file
View file

@ -0,0 +1,79 @@
" ~/.config/vscode/vscode.vimrc
" New-Item -ItemType SymbolicLink -Path ~\.config\vscode\vscode.vimrc -Target ~\.dotfiles\vscode\vscode.vimrc
" ln -sf $DOTFILES/vscode/vscode.vimrc $XDG_CONFIG_HOME/vscode/vscode.vimrc
" And go to vscode vim setting:
"vim.vimrc.path": "$HOME/.config/vscode/vscode.vimrc",
" For all available options see
" https://github.com/VSCodeVim/Vim/blob/d41e286e9238b004f02b425d082d3b4181d83368/src/configuration/vimrc.ts#L120-L407
" Use VSpaceCode instead of <leader>
noremap <space> vspacecode.space
" Switch between tabs
nnoremap H :bprevious<CR>
nnoremap L :bnext<CR>
vnoremap H ^
xnoremap H ^
onoremap H ^
vnoremap L $
xnoremap L $
onoremap L $
noremap J 5j
noremap K 5k
" Similar position to i
" The `noremap` implements text-object-like behavior in VSCodeVim
" Y to yank to end of line
noremap Y y$
nnoremap <esc> removeSecondaryCursors
" lsp
noremap gi editor.action.goToImplementation
noremap gpi editor.action.peekImplementation
noremap gd editor.action.goToDefinition
noremap gpd editor.action.peekDefinition
noremap gt editor.action.goToTypeDefinition
noremap gpt editor.action.peekTypeDefinition
noremap gh editor.action.showDefinitionPreviewHover
noremap gr editor.action.goToReferences
noremap gpr editor.action.referenceSearch.trigger
noremap ga editor.action.quickFix
" Rename, or [c]hange [d]efinition
nnoremap cd editor.action.rename
" Requires matchit by redguardtoo
" nnoremap % extension.matchitJumpItems
noremap zR editor.foldAll
" keep selection after indent
vnoremap < editor.action.outdentLines
vnoremap > editor.action.indentLines
nnoremap [g editor.action.editor.previousChange
nnoremap ]g editor.action.editor.nextChange
" 分词版本的w和b支持中文需要插件
" 为了保证递归解析,而不是打断,使用 `nmap` 而不是 `nnoremap`
" Comment if you don't use cjk or the plugin
" This is buggy
"nmap w cjkWordHandler.cursorWordEndRight
"nmap b cjkWordHandler.cursorWordStartLeft
" <C-w> will be parsed by VSCode itself.
" noremap <C-w>n <C-w>j
" noremap <C-w>e <C-w>k
" noremap <C-w>i <C-w>l
" noremap <C-w>x workbench.action.toggleEditorGroupLayout
" " Use C-w C-w as original C-w
" noremap <C-w><C-w> workbench.action.closeActiveEditor
" noremap <C-w><A-n> workbench.action.togglePanel