Skip to content

Instantly share code, notes, and snippets.

@johtela
Last active September 8, 2021 14:47
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save johtela/b63232747fdd465748fedb9ca6422c84 to your computer and use it in GitHub Desktop.
Save johtela/b63232747fdd465748fedb9ca6422c84 to your computer and use it in GitHub Desktop.
ModalEdit keybindings
"modaledit.keybindings": {
"\n": [
"lineBreakInsert",
{
"command": "modaledit.typeNormalKeys",
"args": {
"keys": "ku"
}
}
],
" ": "modaledit.enterInsert",
"Ö": "removeSecondaryCursors",
// Selection mode on/off
"s": "modaledit.toggleSelection",
"S": [
{
"command": "cursorMove",
"args": {
"to": "wrappedLineStart"
}
},
"modaledit.toggleSelection",
"cursorDownSelect"
],
// Selection (visual) commands
"v": {
"id": 2,
"help": "Select [j|l] left|right, [w] word [d] line [f|b] forwards|backwards [i|a] inside|around",
"l": [
"modaledit.cancelSelection",
{
"command": "cursorRightSelect",
"repeat": "Number(__keys.slice(0, __keys.findIndex(isNaN)).join(''))"
}
],
"j": [
"modaledit.cancelSelection",
{
"command": "cursorLeftSelect",
"repeat": "Number(__keys.slice(0, __keys.findIndex(isNaN)).join(''))"
}
],
"w": [
"modaledit.cancelSelection",
{
"command": "cursorWordEndRightSelect",
"repeat": "Number(__keys.slice(0, __keys.findIndex(isNaN)).join(''))"
}
],
"b": [
"modaledit.cancelSelection",
{
"command": "cursorWordStartLeftSelect",
"repeat": "Number(__keys.slice(0, __keys.findIndex(isNaN)).join(''))"
}
],
"k": [
"modaledit.cancelSelection",
{
"command": "expandLineSelection",
"repeat": "Number(__keys.slice(0, __keys.findIndex(isNaN)).join(''))"
}
],
"t,T": {
"help": "Select forwards until _",
" -~": {
"command": "modaledit.selectBetween",
"args": "{ to: __rkeys[0], inclusive: __rkeys[1] == 'T' }"
}
},
"u,U": {
"help": "Select backwards until _",
" -~": {
"command": "modaledit.selectBetween",
"args": "{ from: __rkeys[0], inclusive: __rkeys[1] == 'U' }"
}
},
"a,i": {
"help": "Select around/inside _",
"w": [
"modaledit.cancelSelection",
{
"command": "modaledit.selectBetween",
"args": "{ from: '\\\\W', to: '\\\\W', regex: true, inclusive: __rkeys[1] == 'a' }"
}
],
" -/,:-@,[-`,{-~": [
"modaledit.cancelSelection",
{
"command": "modaledit.selectBetween",
"args": "{ from: __rkeys[0], to: __rkeys[0], inclusive: __rkeys[1] == 'a' }"
}
],
"(,)": [
"modaledit.cancelSelection",
{
"command": "modaledit.selectBetween",
"args": "{ from: '(', to: ')', inclusive: __rkeys[1] == 'a' }"
}
],
"{,}": [
"modaledit.cancelSelection",
{
"command": "modaledit.selectBetween",
"args": "{ from: '{', to: '}', inclusive: __rkeys[1] == 'a' }"
}
],
"[,]": [
"modaledit.cancelSelection",
{
"command": "modaledit.selectBetween",
"args": "{ from: '[', to: ']', inclusive: __rkeys[1] == 'a' }"
}
],
"<,>": [
"modaledit.cancelSelection",
{
"command": "modaledit.selectBetween",
"args": "{ from: '<', to: '>', inclusive: __rkeys[1] == 'a' }"
}
]
}
},
// Delete/cut commands
"d": {
"id": 3,
"help": "Delete [j|l] left|right, [w] word [f|b] forwards|backwards [i|a] inside|around",
"d": "editor.action.clipboardCutAction",
"l,j,k,w,b": [
{
"command": "modaledit.typeNormalKeys",
"args": "{ keys: 'v' + __rkeys[0] }"
},
"editor.action.clipboardCutAction"
],
"t,T,u,U": {
"help": "Delete until _",
" -~": [
{
"command": "modaledit.typeNormalKeys",
"args": "{ keys: ['v', ...__keys.slice(-2)].join('') }"
},
"editor.action.clipboardCutAction"
]
},
"a,i": {
"help": "Delete around/inside _",
"w, -/,:-@,[-`,{-~": [
{
"command": "modaledit.typeNormalKeys",
"args": "{ keys: ['v', ...__keys.slice(-2)].join('') }"
},
"editor.action.clipboardCutAction"
]
}
},
// Change commands
"c": {
"id": 4,
"help": "Change [j|l] left|right, [w] word [f|b] forwards|backwards [i|a] inside|around",
"c": [
"deleteAllLeft",
"deleteAllRight",
"modaledit.enterInsert"
],
"l,j,k,w,b": [
{
"command": "modaledit.typeNormalKeys",
"args": "{ keys: 'd' + __rkeys[0] }"
},
"modaledit.enterInsert"
],
"t,T,u,U": {
"help": "Change until _",
" -~": [
{
"command": "modaledit.typeNormalKeys",
"args": "{ keys: ['d', ...__keys.slice(-2)].join('') }"
},
"modaledit.enterInsert"
]
},
"a,i": {
"help": "Change around/inside _",
"w, -/,:-@,[-`,{-~": [
{
"command": "modaledit.typeNormalKeys",
"args": "{ keys: ['d', ...__keys.slice(-2)].join('') }"
},
"modaledit.enterInsert"
]
}
},
// Yank/copy commands
"y": {
"id": 5,
"help": "Delete [j|l] left|right, [w] word [f|b] forwards|backwards [i|a] inside|around",
"y": [
"editor.action.clipboardCopyAction",
"modaledit.cancelSelection"
],
"l,j,k,w,b": [
{
"command": "modaledit.typeNormalKeys",
"args": "{ keys: 'v' + __rkeys[0] }"
},
"editor.action.clipboardCopyAction",
"modaledit.cancelSelection"
],
"t,T,u,U": {
"help": "Delete until _",
" -~": [
{
"command": "modaledit.typeNormalKeys",
"args": "{ keys: ['v', ...__keys.slice(-2)].join('') }"
},
"editor.action.clipboardCopyAction",
"modaledit.cancelSelection"
]
},
"a,i": {
"help": "Delete around/inside _",
"w, -/,:-@,[-`,{-~": [
{
"command": "modaledit.typeNormalKeys",
"args": "{ keys: ['v', ...__keys.slice(-2)].join('') }"
},
"editor.action.clipboardCopyAction",
"modaledit.cancelSelection"
]
}
},
"f": [
"deleteRight",
"modaledit.enterInsert"
],
"D": [
"modaledit.cancelSelection",
"cursorEndSelect",
"editor.action.clipboardCutAction"
],
"F": [
"deleteAllRight",
"modaledit.enterInsert"
],
"Y": [
"modaledit.cancelSelection",
"cursorEndSelect",
"editor.action.clipboardCopyAction",
"modaledit.cancelSelection"
],
// Move up/down/left/right
"i": {
"command": "cursorMove",
"args": "{ to: 'up', select: __selecting }"
},
"j": {
"command": "cursorMove",
"args": "{ to: 'left', select: __selecting }"
},
"k": {
"command": "cursorMove",
"args": "{ to: 'down', select: __selecting }"
},
"l": {
"command": "cursorMove",
"args": "{ to: 'right', select: __selecting }"
},
"u": {
"command": "cursorMove",
"args": "{ to: 'wrappedLineStart', select: __selecting }"
},
"o": {
"command": "cursorMove",
"args": "{ to: 'wrappedLineEnd', select: __selecting }"
},
"U": {
"condition": "__selecting",
"true": "cursorTopSelect",
"false": "cursorTop"
},
"O": {
"condition": "__selecting",
"true": "cursorBottomSelect",
"false": "cursorBottom"
},
// Move to next/previous word
"w": {
"condition": "__selecting",
"true": "cursorWordStartRightSelect",
"false": "cursorWordStartRight"
},
"b": {
"condition": "__selecting",
"true": "cursorWordStartLeftSelect",
"false": "cursorWordStartLeft"
},
"W": {
"condition": "__selecting",
"false": {
"command": "cursorWordStartRight",
"repeat": "__char.match(/\\W/)"
},
"true": {
"command": "cursorWordStartRightSelect",
"repeat": "__char.match(/\\W/)"
}
},
"B":
{
"condition": "__selecting",
"false": {
"command": "cursorWordStartLeft",
"repeat": "__char.match(/\\W/)"
},
"true": {
"command": "cursorWordStartLeftSelect",
"repeat": "__char.match(/\\W/)"
}
},
"p": {
"condition": "__selecting",
"true": "cursorWordPartRightSelect",
"false": "cursorWordPartRight"
},
"P": {
"condition": "__selecting",
"true": "cursorWordPartLeftSelect",
"false": "cursorWordPartLeft"
},
// Move to next previous page
"I": "cursorPageUp",
"K": "cursorPageDown",
// Move to next previous definition
"(": "gotoNextPreviousMember.previousMember",
")": "gotoNextPreviousMember.nextMember",
// Repeat movement commands
"1-9": {
"id": 1,
"help": "Enter count followed by [i,j,k,l,w,b,W,B,c,d,g]",
"0-9": 1,
"i,j,k,l,w,b,W,B": {
"command": "modaledit.typeNormalKeys",
"args": "{ keys: __rkeys[0] }",
"repeat": "Number(__keys.slice(0, -1).join(''))"
},
"v": 2,
"d": 3,
"c": 4,
"y": 5,
"g": [
{
"command": "revealLine",
"args": "{ lineNumber: Number(__keys.slice(0, -1).join('')) - 1, at: 'top' }"
},
{
"command": "cursorMove",
"args": {
"to": "viewPortTop"
}
}
]
},
// Scroll so that current line is in the center of the screen
"M": {
"command": "revealLine",
"args": "{ lineNumber: __line, at: 'center' }"
},
// Expand/reduce selection smartly
"e": "editor.action.smartSelect.expand",
"r": "editor.action.smartSelect.shrink",
"E": {
"command": "modaledit.selectBetween",
"args": {
"from": "\\W",
"to": "\\W",
"regex": true
}
},
// Repeat last change
".": "modaledit.repeatLastChange",
// Multiple selections
",": "editor.action.addSelectionToNextFindMatch",
";": "editor.action.addSelectionToPreviousFindMatch",
"-": "cursorUndo",
// Jump to matching bracket
"<": "editor.action.jumpToBracket",
// Undo/redo
"z": [
"undo",
"modaledit.cancelSelection"
],
"Z": "redo",
// Copy/paste
"C": [
"editor.action.clipboardCopyAction",
"modaledit.cancelSelection"
],
"X": [
"editor.action.clipboardCutAction"
],
"V": "editor.action.clipboardPasteAction",
// Insert new line
"n": [
"editor.action.insertLineAfter",
"modaledit.enterInsert"
],
"N": [
"editor.action.insertLineBefore",
"modaledit.enterInsert"
],
// Append to the end of word/line
"a": [
"modaledit.cancelSelection",
"modaledit.enterInsert"
],
"A": [
"cursorEnd",
"modaledit.enterInsert"
],
// Join lines
"J": "editor.action.joinLines",
// Searching
"/": {
"command": "modaledit.search",
"args": {
"caseSensitive": true
}
},
"?": {
"command": "modaledit.search",
"args": {
"backwards": true,
"caseSensitive": true
}
},
"h": "modaledit.nextMatch",
"H": "modaledit.previousMatch",
"g": {
"command": "modaledit.search",
"args": {
"acceptAfter": 1,
"typeAfterAccept": "sj"
}
},
"G": {
"command": "modaledit.search",
"args": {
"acceptAfter": 1,
"selectTillMatch": true
}
},
// Bookmarks
"m": {
"help": "[1-4]: Go to mark, [d]: Define mark",
"d": {
"help": "Define mark [1-4]",
"1-4": {
"command": "modaledit.defineBookmark",
"args": "{ bookmark: Number(__rkeys[0]) }"
}
},
"1-4": {
"command": "modaledit.goToBookmark",
"args": "{ bookmark: Number(__rkeys[0]) }"
}
},
// Quick snippets
"q": {
"help": "[a]: Fill arguments, [w]: Define snippet, [1-4]: Enter snippet",
"a": "modaledit.fillSnippetArgs",
"w": {
"help": "Define snippet [1-4]",
"1-4": {
"command": "modaledit.defineQuickSnippet",
"args": "{ snippet: Number(__rkeys[0]) }"
}
},
"1-4": [
{
"command": "modaledit.insertQuickSnippet",
"args": "{ snippet: Number(__rkeys[0]) }"
},
"editor.action.formatDocument"
]
},
// Misc Commands
":": "workbench.action.showCommands",
"ä": "breadcrumbs.focusAndSelect",
"'": {
"s": [
"editor.action.clipboardCutAction",
"editor.action.smartSelect.expand",
"deleteRight",
"editor.action.clipboardPasteAction"
],
",": [
"cursorEnd",
{
"command": "editor.action.insertSnippet",
"args": {
"snippet": ","
}
}
]
},
// Text transform and formatting
"t": {
"help": "Transform [u] upper [l] lower [t] title case. Format [f] selection [F] document",
"u": "editor.action.transformToUppercase",
"l": "editor.action.transformToLowercase",
"t": "editor.action.transformToTitlecase",
"f": "editor.action.formatSelection",
"F": "editor.action.formatDocument"
}
},
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment