Skip to content

Latest commit

Β 

History

History
594 lines (507 loc) Β· 62.4 KB

ROADMAP.md

File metadata and controls

594 lines (507 loc) Β· 62.4 KB

Key

βœ… - command done

βœ… ⭐ - command done with VS Code specific customization

⚠️ - some variations of the command are not supported

πŸƒ - work in progress

⬇️ - command is low priority; open an issue (or thumbs up the relevant issue) if you want to see it sooner

❌ - command impossible with current VSCode API

πŸ”’ - command accepts numeric prefix

Roadmap

These are the big Vim features, put generally in the order in which we plan to implement them.

Status Command
βœ… Normal Mode
βœ… Insert Mode
βœ… Visual Mode
βœ… Visual Line Mode
βœ… Number Prefixes
βœ… . Operator
βœ… Searching with / and ?
βœ… Correct Undo/Redo
⚠️ Command Remapping
⚠️ Marks
βœ… Text Objects
βœ… Visual Block Mode
βœ… Replace Mode
βœ… Multiple Select Mode
⚠️ Macros
⚠️ Buffer/Window/Tab

Now follows an exhaustive list of every known Vim command that we could find.

Custom commands

  • gh - show the hover tooltip.
  • gb - add an additional cursor at the next place that matches *.

Left-right motions

Status Command Description
βœ… πŸ”’ h left (also: CTRL-H, BS, or Left key)
βœ… πŸ”’ l right (also: Space or Right key)
βœ… 0 to first character in the line (also: Home key)
βœ… ^ to first non-blank character in the line
βœ… πŸ”’ $ to the last character in the line (N-1 lines lower) (also: End key)
βœ… g0 to first character in screen line (differs from "0" when lines wrap)
βœ… g^ to first non-blank character in screen line (differs from "^" when lines wrap)
βœ… πŸ”’ g$ to last character in screen line (differs from "$" when lines wrap)
βœ… gm to middle of the screen line
βœ… πŸ”’ | to column N (default: 1)
βœ… πŸ”’ f{char} to the Nth occurrence of {char} to the right
βœ… πŸ”’ F{char} to the Nth occurrence of {char} to the left
βœ… πŸ”’ t{char} till before the Nth occurrence of {char} to the right
βœ… πŸ”’ T{char} till before the Nth occurrence of {char} to the left
βœ… πŸ”’ ; repeat the last "f", "F", "t", or "T" N times
βœ… πŸ”’ , repeat the last "f", "F", "t", or "T" N times in opposite direction

Up-down motions

Status Command Description
βœ… πŸ”’ k up N lines (also: CTRL-P and Up)
βœ… πŸ”’ j down N lines (also: CTRL-J, CTRL-N, NL, and Down)
βœ… πŸ”’ - up N lines, on the first non-blank character
βœ… πŸ”’ + down N lines, on the first non-blank character (also: CTRL-M and CR)
βœ… πŸ”’ _ down N-1 lines, on the first non-blank character
βœ… πŸ”’ G goto line N (default: last line), on the first non-blank character
βœ… πŸ”’ gg goto line N (default: first line), on the first non-blank character
βœ… πŸ”’ % goto line N percentage down in the file; N must be given, otherwise it is the % command
βœ… πŸ”’ gk up N screen lines (differs from "k" when line wraps)
βœ… πŸ”’ gj down N screen lines (differs from "j" when line wraps)

Text object motions

Status Command Description
βœ… πŸ”’ w N words forward
βœ… πŸ”’ W N blank-separated WORDs forward
βœ… πŸ”’ e N words forward to the end of the Nth word
βœ… πŸ”’ E N words forward to the end of the Nth blank-separated WORD
βœ… πŸ”’ b N words backward
βœ… πŸ”’ B N blank-separated WORDs backward
βœ… πŸ”’ ge N words backward to the end of the Nth word
βœ… πŸ”’ gE N words backward to the end of the Nth blank-separated WORD
βœ… πŸ”’ ) N sentences forward
βœ… πŸ”’ ( N sentences backward
βœ… πŸ”’ } N paragraphs forward
βœ… πŸ”’ { N paragraphs backward
βœ… πŸ”’ ]] N sections forward, at start of section
βœ… πŸ”’ [[ N sections backward, at start of section
βœ… πŸ”’ ][ N sections forward, at end of section
βœ… πŸ”’ [] N sections backward, at end of section
βœ… πŸ”’ [( N times back to unclosed '('
βœ… πŸ”’ [{ N times back to unclosed '{'
⬇️ πŸ”’ [m N times back to start of method (for Java)
⬇️ πŸ”’ [M N times back to end of method (for Java)
βœ… πŸ”’ ]) N times forward to unclosed ')'
βœ… πŸ”’ ]} N times forward to unclosed '}'
⬇️ πŸ”’ ]m N times forward to start of method (for Java)
⬇️ πŸ”’ ]M N times forward to end of method (for Java)
⬇️ πŸ”’ [# N times back to unclosed "#if" or "#else"
⬇️ πŸ”’ ]# N times forward to unclosed "#else" or "#endif"
⬇️ πŸ”’ [* N times back to start of a C comment "/*"
⬇️ πŸ”’ ]* N times forward to end of a C comment "*/"

Pattern searches

Status Command Description Note
βœ… ⭐ πŸ”’ /{pattern}[/[offset]]<CR> search forward for the Nth occurrence of {pattern} Currently we only support JavaScript Regex but not Vim's in-house Regex engine.
βœ… ⭐ πŸ”’ ?{pattern}[?[offset]]<CR> search backward for the Nth occurrence of {pattern} Currently we only support JavaScript Regex but not Vim's in-house Regex engine.
⚠️ πŸ”’ /<CR> repeat last search, in the forward direction {count} is not supported.
⚠️ πŸ”’ ?<CR> repeat last search, in the backward direction {count} is not supported.
βœ… πŸ”’ n repeat last search
βœ… πŸ”’ N repeat last search, in opposite direction
βœ… πŸ”’ * search forward for the identifier under the cursor
βœ… πŸ”’ # search backward for the identifier under the cursor
βœ… πŸ”’ g* like "*", but also find partial matches
βœ… πŸ”’ g# like "#", but also find partial matches
βœ… gd goto local declaration of identifier under the cursor
⬇️ gD goto global declaration of identifier under the cursor

Marks and motions

Status Command Description
βœ… m{a-zA-Z} mark current position with mark {a-zA-Z}
βœ… `{a-z} go to mark {a-z} within current file
βœ… `{A-Z} go to mark {A-Z} in any file
βœ… `{0-9} go to the position where Vim was previously exited
βœ… `` go to the position before the last jump
⬇️ `" go to the position when last editing this file
βœ… `[ go to the start of the previously operated or put text
βœ… '[ go to the start of the previously operated or put text
βœ… `] go to the end of the previously operated or put text
βœ… '] go to the end of the previously operated or put text
⬇️ `< go to the start of the (previous) Visual area
⬇️ `> go to the end of the (previous) Visual area
βœ… `. go to the position of the last change in this file
βœ… '. go to the position of the last change in this file
⬇️ '{a-zA-Z0-9[]'"<>.} same as `, but on the first non-blank in the line
⬇️ :marks print the active marks
βœ… πŸ”’ CTRL-O go to Nth older position in jump list
βœ… πŸ”’ CTRL-I go to Nth newer position in jump list
⬇️ :ju[mps] print the jump list

Various motions

Status Command Description
βœ… % find the next brace, bracket, comment, or "#if"/ "#else"/"#endif" in this line and go to its match
βœ… πŸ”’ H go to the Nth line in the window, on the first non-blank
βœ… M go to the middle line in the window, on the first non-blank
βœ… πŸ”’ L go to the Nth line from the bottom, on the first non-blank
⬇️ πŸ”’ go go to Nth byte in the buffer
⬇️ :[range]go[to][off] go to [off] byte in the buffer

Using tags

The following are all marked low priority because VSCode has very good support for tags with Goto Symbol. Try it from the command palette if you haven't yet!

Status Command Description
⬇️ :ta[g][!] {tag} jump to tag {tag}
⬇️ :[count]ta[g][!] jump to [count]'th newer tag in tag list
⬇️ CTRL-] jump to the tag under cursor, unless changes have been made
⬇️ :ts[elect][!] [tag] list matching tags and select one to jump to
⬇️ :tj[ump][!] [tag] jump to tag [tag] or select from list when there are multiple matches
⬇️ :lt[ag][!] [tag] jump to tag [tag] and add matching tags to the location list
⬇️ :tagsa print tag list
⬇️ πŸ”’ CTRL-T jump back from Nth older tag in tag list
⬇️ :[count]po[p][!] jump back from [count]'th older tag in tag list
⬇️ :[count]tn[ext][!] jump to [count]'th next matching tag
⬇️ :[count]tp[revious][!] jump to [count]'th previous matching tag
⬇️ :[count]tr[ewind][!] jump to [count]'th matching tag
⬇️ :tl[ast][!] jump to last matching tag
⬇️ :pt[ag] {tag} open a preview window to show tag {tag}
⬇️ CTRL-W } like CTRL-] but show tag in preview window
⬇️ :pts[elect] like ":tselect" but show tag in preview window
⬇️ :ptj[ump] like ":tjump" but show tag in preview window
⬇️ :pc[lose] close tag preview window
⬇️ CTRL-W z close tag preview window`

Scrolling

Status Command Description
βœ… πŸ”’ CTRL-E window N lines downwards (default: 1)
βœ… πŸ”’ CTRL-D window N lines Downwards (default: 1/2 window)
βœ… πŸ”’ CTRL-F window N pages Forwards (downwards)
βœ… πŸ”’ CTRL-Y window N lines upwards (default: 1)
βœ… πŸ”’ CTRL-U window N lines Upwards (default: 1/2 window)
βœ… πŸ”’ CTRL-B window N pages Backwards (upwards)
βœ… z CR or zt redraw, current line at top of window
βœ… z. or zz redraw, current line at center of window
βœ… z- or zb redraw, current line at bottom of window

These only work when 'wrap' is off:

Status Command Description Note
βœ… ⭐ πŸ”’ zh scroll screen N characters to the right In Code, the cursor will always move when you run this command, whether the horizontal scrollbar moves or not.
βœ… ⭐ πŸ”’ zl scroll screen N characters to the left As above
βœ… ⭐ πŸ”’ zH scroll screen half a screenwidth to the right As above
βœ… ⭐ πŸ”’ zL scroll screen half a screenwidth to the left As above

Inserting text

Status Command Description
βœ… πŸ”’ a append text after the cursor (N times)
βœ… πŸ”’ A append text at the end of the line (N times)
βœ… πŸ”’ i insert text before the cursor (N times) (also: Insert)
βœ… πŸ”’ I insert text before the first non-blank in the line (N times)
βœ… πŸ”’ gI insert text in column 1 (N times)
βœ… gi insert at the end of the last change
βœ… πŸ”’ o open a new line below the current line, append text (N times)
βœ… πŸ”’ O open a new line above the current line, append text (N times)

in Visual block mode:

Status Command Description
βœ… I insert the same text in front of all the selected lines
βœ… A append the same text after all the selected lines

Insert mode keys

leaving Insert mode:

Status Command Description
βœ… Esc end Insert mode, back to Normal mode
βœ… CTRL-C like Esc, but do not use an abbreviation
βœ… CTRL-O {command} execute {command} and return to Insert mode

moving around:

Status Command Description
βœ… cursor keys move cursor left/right/up/down
βœ… shift-left/right one word left/right
βœ… shift-up/down one screenful backward/forward
βœ… End cursor after last character in the line
βœ… Home cursor to first character in the line

Special keys in Insert mode

Status Command Description Note
⬇️ CTRL-V {char}.. insert character literally, or enter decimal byte value
⚠️ NL or CR or CTRL-M or CTRL-J begin new line CTRL-M and CTRL-J are not supported
βœ… CTRL-E insert the character from below the cursor
βœ… CTRL-Y insert the character from above the cursor
βœ… ⭐ CTRL-A insert previously inserted text We apply previously document change made in previous Insert session and we only apply changes that happen under cursor
βœ… ⭐ CTRL-@ insert previously inserted text and stop Insert mode As above
βœ… CTRL-R {0-9a-z%#:.-="} insert the contents of a register
βœ… CTRL-N insert next match of identifier before the cursor
βœ… CTRL-P insert previous match of identifier before the cursor
⬇️ CTRL-X ... complete the word before the cursor in various ways
βœ… BS or CTRL-H delete the character before the cursor
βœ… Del delete the character under the cursor
βœ… CTRL-W delete word before the cursor
βœ… CTRL-U delete all entered characters in the current line
βœ… CTRL-T insert one shiftwidth of indent in front of the current line
βœ… CTRL-D delete one shiftwidth of indent in front of the current line
⬇️ 0 CTRL-D delete all indent in the current line
⬇️ ^ CTRL-D delete all indent in the current line, restore indent in next line

Digraphs

Status Command Description
βœ… :dig[raphs] show current list of digraphs
⬇️ :dig[raphs] {char1}{char2} {number} ... add digraph(s) to the list

Special inserts

Status Command Description
⚠️ :r [file] insert the contents of [file] below the cursor
⚠️ :r! {command} insert the standard output of {command} below the cursor

Deleting text

Status Command Description
βœ… πŸ”’ x delete N characters under and after the cursor
βœ… πŸ”’ Del delete N characters under and after the cursor
βœ… πŸ”’ X delete N characters before the cursor
βœ… πŸ”’ d{motion} delete the text that is moved over with {motion}
βœ… {visual}d delete the highlighted text
βœ… πŸ”’ dd delete N lines
βœ… πŸ”’ D delete to the end of the line (and N-1 more lines)
βœ… πŸ”’ J join N-1 lines (delete EOLs)
βœ… {visual}J join the highlighted lines
βœ… πŸ”’ gJ like "J", but without inserting spaces
βœ… {visual}gJ like "{visual}J", but without inserting spaces
βœ… :[range]d [x] delete [range] lines [into register x]

Copying and moving text

Status Command Description
βœ… "{char} use register {char} for the next delete, yank, or put
βœ… "* use register * to access system clipboard
βœ… :reg show the contents of all registers
βœ… :reg {arg} show the contents of registers mentioned in {arg}
βœ… πŸ”’ y{motion} yank the text moved over with {motion} into a register
βœ… {visual}y yank the highlighted text into a register
βœ… πŸ”’ yy yank N lines into a register
βœ… πŸ”’ Y yank N lines into a register
βœ… πŸ”’ p put a register after the cursor position (N times)
βœ… πŸ”’ P put a register before the cursor position (N times)
βœ… πŸ”’ ]p like p, but adjust indent to current line
βœ… πŸ”’ [p like P, but adjust indent to current line
βœ… πŸ”’ gp like p, but leave cursor after the new text
βœ… πŸ”’ gP like P, but leave cursor after the new text

Changing text

Status Command Description Note
βœ… πŸ”’ r{char} replace N characters with {char}
⬇️ πŸ”’ gr{char} replace N characters without affecting layout
βœ… ⭐ πŸ”’ R enter Replace mode (repeat the entered text N times) {count} is not supported
⬇️ πŸ”’ gR enter virtual Replace mode: Like Replace mode but without affecting layout
βœ… {visual}r{char} in Visual block, visual, or visual line modes: Replace each char of the selected text with {char}

(change = delete text and enter Insert mode)

Status Command Description
βœ… πŸ”’ c{motion} change the text that is moved over with {motion}
βœ… {visual}c change the highlighted text
βœ… πŸ”’ cc change N lines
βœ… πŸ”’ S change N lines
βœ… πŸ”’ C change to the end of the line (and N-1 more lines)
βœ… πŸ”’ s change N characters
βœ… {visual}c in Visual block mode: Change each of the selected lines with the entered text
βœ… {visual}C in Visual block mode: Change each of the selected lines until end-of-line with the entered text
βœ… {visual}~ switch case for highlighted text
βœ… {visual}u make highlighted text lowercase
βœ… {visual}U make highlighted text uppercase
βœ… g~{motion} switch case for the text that is moved over with {motion}
βœ… gu{motion} make the text that is moved over with {motion} lowercase
βœ… gU{motion} make the text that is moved over with {motion} uppercase
βœ… {visual}g? perform rot13 encoding on highlighted text
βœ… g?{motion} perform rot13 encoding on the text that is moved over with {motion}
βœ… πŸ”’ CTRL-A add N to the number at or after the cursor
βœ… πŸ”’ CTRL-X subtract N from the number at or after the cursor
βœ… πŸ”’ <{motion} move the lines that are moved over with {motion} one shiftwidth left
βœ… πŸ”’ << move N lines one shiftwidth left
βœ… πŸ”’ >{motion} move the lines that are moved over with {motion} one shiftwidth right
βœ… πŸ”’ >> move N lines one shiftwidth right
βœ… πŸ”’ gq{motion} format the lines that are moved over with {motion} to 'textwidth' length
⬇️ :[range]ce[nter][width] center the lines in [range]
⬇️ :[range]le[ft][indent] left-align the lines in [range] (with [indent])
⬇️ :[range]ri[ght][width] right-align the lines in [range]

Complex changes

Status Command Description Note
⬇️ πŸ”’ !{motion}{command}<CR> filter the lines that are moved over through {command}
⬇️ πŸ”’ !!{command}<CR> filter N lines through {command}
⬇️ {visual}!{command}<CR> filter the highlighted lines through {command}
⬇️ :[range]! {command}<CR> filter [range] lines through {command}
βœ… πŸ”’ ={motion} filter the lines that are moved over through 'equalprg'
βœ… πŸ”’ == filter N lines through 'equalprg'
βœ… {visual}= filter the highlighted lines through 'equalprg'
βœ… ⭐ ⚠️ :[range]s[ubstitute]/{pattern}/{string}/[g][c] substitute {pattern} by {string} in [range] lines; with [g], replace all occurrences of {pattern}; with [c], confirm each replacement Currently we only support JavaScript Regex and only options gi are implemented
⬇️ :[range]s[ubstitute][g][c] repeat previous ":s" with new range and options
⬇️ & Repeat previous ":s" on current line without options
⬇️ :[range]ret[ab][!] [tabstop] set 'tabstop' to new value and adjust white space accordingly

Visual mode

Status Command Description
βœ… v start highlighting characters or stop highlighting
βœ… V start highlighting linewise or stop highlighting
βœ… CTRL-V start highlighting blockwise or stop highlighting
βœ… o exchange cursor position with start of highlighting
βœ… gv start highlighting on previous visual area

Text objects (only in Visual mode or after an operator)

Status Command Description
βœ… πŸ”’ aw Select "a word"
βœ… πŸ”’ iw Select "inner word"
βœ… πŸ”’ aW Select "a WORD"
βœ… πŸ”’ iW Select "inner WORD"
βœ… πŸ”’ as Select "a sentence"
βœ… πŸ”’ is Select "inner sentence"
βœ… πŸ”’ ap Select "a paragraph"
βœ… πŸ”’ ip Select "inner paragraph"
βœ… πŸ”’ a], a[ select '[' ']' blocks
βœ… πŸ”’ i], i[ select inner '[' ']' blocks
βœ… πŸ”’ ab, a(, a) Select "a block" (from "[(" to "])")
βœ… πŸ”’ ib, i), i( Select "inner block" (from "[(" to "])")
βœ… πŸ”’ a>, a< Select "a <> block"
βœ… πŸ”’ i>, i< Select "inner <> block"
βœ… πŸ”’ aB, a{, a} Select "a Block" (from "[{" to "]}")
βœ… πŸ”’ iB, i{, i} Select "inner Block" (from "[{" to "]}")
βœ… πŸ”’ at Select "a tag block" (from <aaa> to </aaa>)
βœ… πŸ”’ it Select "inner tag block" (from <aaa> to </aaa>)
βœ… πŸ”’ a' Select "a single quoted string"
βœ… πŸ”’ i' Select "inner single quoted string"
βœ… πŸ”’ a" Select "a double quoted string"
βœ… πŸ”’ i" Select "inner double quoted string"
βœ… πŸ”’ a` Select "a backward quoted string"
βœ… πŸ”’ i` Select "inner backward quoted string"
βœ… πŸ”’ ia Select "inner argument" from the targets.vim plugin
βœ… πŸ”’ aa Select "an argument" from the targets.vim plugin

Repeating commands

Status Command Description Note
βœ… ⭐ πŸ”’ . repeat last change (with count replaced with N) Content changes that don't happen under cursor can not be repeated.
βœ… q{a-z} record typed characters into register {a-z}
⬇️ q{A-Z} record typed characters, appended to register {a-z}
βœ… q stop recording
βœ… πŸ”’ @{a-z} execute the contents of register {a-z} (N times)
βœ… πŸ”’ @@ repeat previous @{a-z} (N times)
⬇️ :@{a-z} execute the contents of register {a-z} as an Ex command
⬇️ :@@ repeat previous :@{a-z}
⬇️ :[range]g[lobal]/{pattern}/[cmd] execute Ex command cmd on the lines within [range] where {pattern} matches
⬇️ :[range]g[lobal]!/{pattern}/[cmd] execute Ex command cmd on the lines within [range] where {pattern} does NOT match
⬇️ :so[urce] {file} read Ex commands from {file}
⬇️ :so[urce]! {file} read Vim commands from {file}
⬇️ :sl[eep][sec] don't do anything for [sec] seconds
⬇️ πŸ”’ gs goto Sleep for N seconds

options

Status Command Description Note
⬇️ :se[t] show all modified options
⬇️ :se[t] all show all non-termcap options
⬇️ :se[t] termcap show all termcap options
βœ… :se[t] {option} set boolean option (switch it on), show string or number option
βœ… :se[t] no{option} reset boolean option (switch it off)
βœ… :se[t] inv{option} invert boolean option
βœ… :se[t] {option}={value} set string/number option to {value}
βœ… :se[t] {option}+={value} append {value} to string option, add {value} to number option
βœ… ⭐ :se[t] {option}-={value} remove {value} to string option, subtract {value} from number option We don't support string option here.
βœ… :se[t] {option}? show value of {option}
⬇️ :se[t] {option}& reset {option} to its default value
⬇️ :setl[ocal] like ":set" but set the local value for options that have one
⬇️ :setg[lobal] like ":set" but set the global value of a local option
⬇️ :fix[del] set value of 't_kD' according to value of 't_kb'
⬇️ :opt[ions] open a new window to view and set options, grouped by functionality, a one line explanation and links to the help

Since the list is too long, now we just put those already supported options here.

Status Command Default Value Description
βœ… tabstop (ts) 4. we use Code's default value tabSize instead of Vim number of spaces that <Tab> in file uses
βœ… hlsearch (hls) false When there is a previous search pattern, highlight all its matches.
βœ… ignorecase (ic) true Ignore case in search patterns.
βœ… smartcase (scs) true Override the 'ignorecase' option if the search pattern contains upper case characters.
βœ… iskeyword (isk) @,48-57,_,128-167,224-235 keywords contain alphanumeric characters and '_'. If there is no user setting for iskeyword, we use editor.wordSeparators properties.
βœ… scroll (scr) 20 Number of lines to scroll with CTRL-U and CTRL-D commands.
βœ… expandtab (et) True. we use Code's default value insertSpaces instead of Vim use spaces when <Tab> is inserted
βœ… autoindent true Keep indentation when doing cc or S in normal mode to replace a line.

Undo/Redo commands

Status Command Description Note
βœ… πŸ”’ u undo last N changes Current implementation may not cover every case perfectly.
βœ… πŸ”’ CTRL-R redo last N undone changes As above.
βœ… U restore last changed line

External commands

Status Command Description
βœ… :sh[ell] start a shell
βœ… :!{command} execute {command} with a shell
⬇️ K lookup keyword under the cursor with 'keywordprg' program (default: "man")

Ex ranges

Status Command Description Note
βœ… , separates two line numbers
βœ… ⭐ ; idem, set cursor to the first line number before interpreting the second one The cursor movement is not included.
βœ… {number} an absolute line number
βœ… . the current line
βœ… $ the last line in the file
βœ… % equal to 1,$ (the entire file)
βœ… * equal to '<,'> (visual area)
βœ… 't position of mark t
⬇️ /{pattern}[/] the next line where {pattern} matches
⬇️ ?{pattern}[?] the previous line where {pattern} matches
βœ… +[num] add [num] to the preceding line number (default: 1)
βœ… -[num] subtract [num] from the preceding line number (default: 1)

Editing a file

Status Command Description Note
βœ… ⭐ :e[dit] {file} Edit {file}. We will open file in a new Tab of current Grouped Editor instead of opening in current tab.

Multi-window commands

Status Command Description Note
βœ… ⭐ :e[dit] {file} Edit {file}. We will open file in a new Tab of current Grouped Editor instead of opening in current tab.
βœ… ⭐ <ctrl-w> hl Switching between windows. As we don't have the concept of Window in VS Code, we are mapping these commands to switching between Grouped Editors.
βœ… :sp {file} Split current window in two.
βœ… ⭐ :vsp {file} Split vertically current window in two.
βœ… <ctrl-w> s Split current window in two.
βœ… ⭐ <ctrl-w> v Split vertically current window in two.
βœ… ⭐ <ctrl-w> o Close other editor groups.
βœ… :new Create a new window horizontally and start editing an empty file in it.
βœ… ⭐ :vne[w] Create a new window vertically and start editing an empty file in it.

Tabs

Status Command Description Note
βœ… :tabn[ext] πŸ”’ Go to next tab page or tab page {count}. The first tab page has number one.
βœ… {count}<C-PageDown>, {count}gt Same as above
βœ… :tabp[revious] πŸ”’ Go to the previous tab page. Wraps around from the first one to the last one.
βœ… :tabN[ext] πŸ”’ Same as above
βœ… {count}<C-PageUp>, {count}gT Same as above
βœ… :tabfir[st] Go to the first tab page.
βœ… :tabl[ast] Go to the last tab page.
βœ… :tabe[dit] {file} Open a new tab page with an empty window, after the current tab page
⬇️ :[count]tabe[dit], :[count]tabnew Same as above [count] is not supported.
βœ… :tabnew {file} Open a new tab page with an empty window, after the current tab page
⬇️ :[count]tab {cmd} Execute {cmd} and when it opens a new window open a new tab page instead.
βœ… ⭐ :tabc[lose][!] πŸ”’ Close current tab page or close tab page {count}. Code will close tab directly without saving.
βœ… ⭐ :tabo[nly][!] Close all other tab pages. ! is not supported, Code will close tab directly without saving.
βœ… :tabm[ove][n] Move the current tab page to after tab page N.
⬇️ :tabs List the tab pages and the windows they contain. You can always use Code's built-in shortcut: cmd/ctrl+p
⬇️ :tabd[o] {cmd} Execute {cmd} in each tab page.

Folding

Fold methods

The folding method can be set with the 'foldmethod' option. This is currently not possible as we are relying on Code's Fold logic.

Fold commands

Pretty much everything fold-related is blocked by this issue.

Status Command Description
⬇️ zf{motion} or {Visual}zf Operator to create a fold.
⬇️ zF Create a fold for [count] lines. Works like "zf".
⬇️ zd Delete one fold at the cursor.
⬇️ zD Delete folds recursively at the cursor.
⬇️ zE Eliminate all folds in the window.
βœ… zo Open one fold under the cursor.When a count is given, that many folds deep will be opened.
βœ… zO Open all folds under the cursor recursively.
βœ… zc Close one fold under the cursor. When a count is given, that many folds deep are closed.
βœ… zC Close all folds under the cursor recursively.
βœ… za When on a closed fold: open it. When on an open fold: close it and set 'foldenable'.
⬇️ zA When on a closed fold: open it recursively. When on an open fold: close it recursively and set 'foldenable'.
⬇️ zv View cursor line: Open just enough folds to make the line in which the cursor is located not folded.
⬇️ zx Update folds: Undo manually opened and closed folds: re-apply 'foldlevel', then do "zv": View cursor line.
⬇️ zX Undo manually opened and closed folds
⬇️ zm Fold more: Subtract one from 'foldlevel'.
βœ… zM Close all folds: set 'foldlevel' to 0. 'foldenable' will be set.
⬇️ zr Reduce folding: Add one to 'foldlevel'.
βœ… zR Open all folds. This sets 'foldlevel' to highest fold level.
⬇️ zn Fold none: reset 'foldenable'. All folds will be open.
⬇️ zN Fold normal: set 'foldenable'. All folds will be as they were before.
⬇️ zi Invert 'foldenable'.
⬇️ [z Move to the start of the current open fold.
⬇️ ]z Move to the end of the current open fold.
⬇️ zj Move downwards to the start of the next fold.
⬇️ zk Move upwards to the end of the previous fold.

Fold options

Currently we don't support any fold option and we are following Code configurations.