Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

dk manual

Command line

Open each file in the ductus editor and show the first one. A file that does not
exist yet opens empty. With no file, dk opens an empty [scratch] buffer, and with
one directory it opens [scratch] and the file picker at that directory.
--tabs opens each file in a tab page of its own. --split-right and --split-below
open each file in a view to the right of the one before, or below it.
To open a file whose name starts with a dash or is the name of a command, put
-- or ./ before it, as in dk ./trust.
dk sets the title of the terminal window to "dk: " and the file of the focused
document, with [+] after it for unsaved changes. When dk ends, it puts the old
title back, or empties it in a terminal that cannot. [editor] title = false
leaves the title alone.

Usage:
  dk [file...|directory] [flags]
  dk [command]

Available Commands:
  completion     Generate the autocompletion script for the specified shell
  default-config Print a config.toml with every key at its default
  diff           Open two files in a diff session
  grammar        Fetch or build the tree-sitter grammars
  health         Print what each language has
  help           Help about any command
  trust          Trust the .ductus of the workspace

Flags:
  -d, --debug         Enable debug logging
  -h, --help          help for dk
      --log string    write the debug log to this file, even without --debug
  -o, --split-below   open each file in a view below the one before
  -O, --split-right   open each file in a view to the right of the one before
  -p, --tabs          open each file in a tab page of its own
  -v, --version       version for dk

Use "dk [command] --help" for more information about a command.

Config keys

KeyDefaultDescription
theme"nord"The theme dk draws in: a name, or { light = “…”, dark = “…” }.
editor.auto-completiontrueCompletion starts on its own while you type.
editor.auto-formattrue:w formats the file before it saves, in a language that auto-formats.
editor.auto-infotrueA box shows the keys that can follow a pending key.
editor.auto-pairstrueTyping a bracket inserts its pair: true, false, or a table such as { ‘(’ = ‘)’ }.
editor.auto-reloadtrueWhen another program changes a file, dk reloads it, unless the document has unsaved changes. A .ductus cannot set it.
editor.clipboard-provider"tmux" (example)How the + and * registers reach the clipboard: a provider name, or { custom = { yank = …, paste = … } }. By default dk detects one at first use. A .ductus cannot set it.
editor.color-modestrueThe mode element of the focused view and the mode label of a picker draw in ui.statusline.normal, .insert, or .select.
editor.completion-replacefalseA completion item replaces the word after the cursor too.
editor.completion-timeout250How many milliseconds dk waits after the last word character you type before it asks for completions.
editor.completion-trigger-len2How many word characters you type before dk asks for completions, 0 to 255.
editor.date-format"iso"How dk draws a date: “iso” as 2026-11-10, “dmy” as 10/11/2026, “mdy” as 11/10/2026, or “locale” for the form of LC_ALL, LC_TIME or LANG, and iso when those name none.
editor.default-yank-register"\""The register that y, d, c, p, P and R use when “ picks none. A .ductus cannot set it.
editor.gutter-diff"vcs"What the diff gutter compares with: “vcs” for the vcs base, “disk” for the file on disk, or “both”, where a line that differs from the file on disk shows that diff.
editor.indent-heuristic"hybrid"How dk picks the indent of a new line: simple, tree-sitter, or hybrid.
editor.jump-label-alphabet"abcdefghijklmnopqrstuvwxyz"The characters of the gw labels: at least two, each used once and one column wide.
editor.line-number"absolute"“absolute”, or “relative” to the line of the cursor.
editor.listing-splitfalsetrue opens a listing, such as the one of :help or :show-about, in a new view above the focused view. false opens it in the focused view, and :bc brings back the document that it replaced.
editor.middle-click-pastetrueA mouse selection yanks to mouse-yank-register, and a middle click pastes it.
editor.mousetruefalse turns the mouse off, so the terminal selects text itself.
editor.mouse-yank-register"*"The register that a mouse selection yanks to and a middle click pastes. Only this file sets it.
editor.picker-size80How much of the width and the height a picker takes, in percent, 10 to 100.
editor.picker-start-mode"normal"“normal”, or “insert” to type into the query of a new picker right away.
editor.popup-border"popup"The boxes in a frame: “popup” for the popups and the docs pane, “menu” for the completion menu, “all”, or “none”.
editor.preview-completion-inserttrueThe selected completion item shows in the text.
editor.print-command["enscript"]The program and first arguments that :print-document sends the text to on stdin. With a file, dk adds -o - for PostScript on stdout. Only this file sets it.
editor.rainbow-bracketstrueBrackets draw in the rainbow colors of the theme, by their depth. The rainbow-brackets of a language overrides it.
editor.restore-cursortrueA file opens where its cursor was when it last closed. false opens it at the start. Only this file sets it.
editor.restore-cursor-files100How many files dk remembers a cursor place for, 1 to 10000. Only this file sets it.
editor.rulers[]The text columns, counted from 1, that show a ruler in ui.virtual.ruler. The rulers of a language override them.
editor.scrolloff5The rows and columns that a view keeps between the cursor and its edges, 0 to 1000.
editor.shell["sh", "-c"]The program and first arguments that run a shell command, with the command line last. Only this file sets it.
editor.splashtruedk with no file shows its name, version and key hints over the empty document until the first key.
editor.tabline"multiple"When the top row shows the tab pages: “multiple” with more than one, “always”, or “never”.
editor.text-width80The width in display columns that g q fills each line to, 1 or more.
editor.time-format"24h"How dk draws a time of day: “24h” as 15:04, “12h” as 3:04 PM, or “locale” for the clock of LC_ALL, LC_TIME or LANG, and 24h when those name none.
editor.titletruedk sets the title of the terminal window to “dk: “ and the file of the focused document. It puts the old title back when it ends, or empties it in a terminal that cannot restore it.
editor.undofile-exclude["*.env", "**/.git/COMMIT_EDITMSG"]Globs of files that get no undofile. A list of your own replaces these.
editor.url-opener["xdg-open"]The program and first arguments that open a URL for g f, with the URL last. Only this file sets it.
editor.file-picker.deduplicate-linkstruespace f and space / skip each link that resolves inside the root.
editor.file-picker.follow-symlinkstruespace f and space / go into a linked directory, and into each link target once.
editor.file-picker.git-excludetruespace f and space / skip what .git/info/exclude names, in a repo.
editor.file-picker.git-globaltruespace f and space / skip what the core.excludesFile of git names, in a repo.
editor.file-picker.git-ignoretruespace f and space / skip what .gitignore names, in a repo.
editor.file-picker.hiddentruespace f and space / skip each name that starts with a dot.
editor.file-picker.ignoretruespace f and space / skip what .ignore names.
editor.file-picker.max-depth1 (example)space f and space / list no file deeper than this level, 1 for the files of the root. No limit by default.
editor.file-picker.parentstrueThe ignore files of the directories above the root count too.
editor.gutters.layout["diagnostics", "spacer", "line-numbers", "spacer", "diff"]The gutter columns: diagnostics, spacer, line-numbers, diff, and code-action-hint.
editor.gutters.line-numbers.min-width3The minimum width of the line numbers, 0 to 32.
editor.inline-blame.auto-fetchfalseA file that opens in a view annotates at once, in a trusted workspace. With false, only space B annotates it.
editor.inline-blame.format"{author-short}, {time-ago} • {title} • {change}"The text of a blame: {author}, {author-short}, {email}, {date}, {time-ago}, {title}, {body}, {commit} and {change}.
editor.inline-blame.show"never"The lines that show their blame after their end: “never”, “cursor-line”, or “all-lines”.
editor.lsp.auto-document-highlighttrueWhen the cursor rests, the uses of the symbol under it show in ui.highlight.
editor.lsp.auto-signature-helptruefalse stops the signature help requests that dk makes by itself.
editor.lsp.display-signature-help-docstrueThe signature help popup shows the docs of the signature.
editor.lsp.document-highlight-timeout1000How many milliseconds the cursor rests before the uses of its symbol show.
editor.lsp.goto-reference-include-declarationtruegr lists the declaration too.
editor.lsp.snippetstrueA server that starts gets snippet completions, with tab stops.
editor.search.highlighttrueEvery match of the search pattern is highlighted in each view, in ui.highlight.search or ui.highlight.
editor.search.smart-casetrueA search pattern with no upper case letter ignores case, and false always matches case.
editor.search.wrap-aroundtrueA search that passes the last match goes on from the other end of the document.
editor.smart-tab.enabletrueTab in Insert mode goes to the next tab stop or past the syntax node after text.
editor.smart-tab.supersede-menufalseTab and S-Tab go past the completion menu to smart-tab.
editor.soft-wrap.enablefalseA line that is wider than a view draws on more rows, and breaks between words.
editor.soft-wrap.max-indent-retain40With enable, a row after the first keeps the indent of its line when the indent is at most this many cells and at most two fifths of the width of the view. Otherwise it has none.
editor.soft-wrap.max-wrap20With enable, a word that does not fit its row moves whole to the next row when at most this many cells of it fit, and otherwise breaks at the edge. It is at most a quarter of the width of the view.
editor.soft-wrap.wrap-at-text-widthfalseWith enable, a row breaks at text-width when text-width is less than the width of the view.
editor.soft-wrap.wrap-indicator"↪ "With enable, the text that a row after the first starts with, in ui.virtual.wrap. A control character shows as a glyph. At most 8 cells of it show, and never more than a quarter of the width of the view after the gutter (A2, A5).
editor.sticky-context.enabletrueFor each scope that contains the cursor and starts above the view, its first line shows at the top of the view.
editor.sticky-context.max-lines3The maximum rows of scopes at the top of a view, from 1 to 100. The outer scopes go first.
editor.sticky-context.max-symbols10000The maximum document symbols that the scopes take from a server reply, from 1 to 100000 (A2).
editor.statusline.center[]The elements in the middle of the status line.
editor.statusline.left["mode", "spinner", "file-name", "read-only-indicator", "file-modification-indicator", "spacer", "version-control"]The elements on the left of the status line.
editor.statusline.right["diagnostics", "selections", "register", "position", "total-line-numbers", "file-encoding", "file-type"]The elements on the right of the status line.
editor.statusline.separator"│"The text of the separator element.
editor.statusline.mode.insert"INS"The name of Insert mode.
editor.statusline.mode.normal"NOR"The name of Normal mode.
editor.statusline.mode.select"SEL"The name of Select mode.
keys.normal.x"move-character-right" (example)A key of [keys.normal], [keys.insert], or [keys.select] takes a command name.
plugins.vcs.exec["jj"] (example)The programs that a plugin may run. The shipped vcs plugin has this grant.
plugins.vcs.sha256"<64 hex digits>" (example)The SHA-256 of plugins/<name>.wasm, as sha256sum prints it. The grant applies to that file only with this pin.

Typed commands

CommandArgumentDescription
:annotateshow or hide the change of each line in a column of the gutter
:append-output<command>run the command once, and put its output after each selection
:change-current-directory, :cd[<directory>]change the working directory to the directory, or to home with none, and show it on the last row
:check-health[all|all-languages|clipboard|languages|<language>]open a [health] document with what dk health prints: what each language has
:close-document, :bcclose the document, but not with unsaved changes
:close-document!, :bc!close the document and drop the unsaved changes
:close-other-tabs, :taboclose every other tab page; the files stay open
:close-tab, :tabc[<N>]close the tab page, or tab page N, and its views; the files stay open
:diff-baseshow the vcs base of the file and the file in a diff session
:diff-diskshow the file on disk and the file in a diff session
:diff-files, :diffs<file1> <file2>show two files side by side, with their changes lined up
:diff-thismark the view, and in a second view compare the two in a diff session
:echo<text>...show the arguments on the last row, separated by single spaces
:end-diffend the diff session of the view
:format, :fmtformat the file with the formatter of its language or a language server
:get-diff-change, :diffgput back the base text of each change under a range
:goto-line, :g<line>go to the line; :<line> does the same
:goto-next-document, :bnshow the next open document
:goto-next-tab, :tabn[<N>]go to the next tab page, or to tab page N, from 1
:goto-previous-document, :bpshow the previous open document
:goto-previous-tab, :tabp, :tabN[<N>]go to the previous tab page, or N tab pages back
:help[<word>]show the keys and commands
:hide-search-matches, :noh, :nohlhide the matches of the search pattern until the next search
:insert-output<command>run the command once, and put its output before each selection
:move-tab, :tabm[<N>|+<N>|-<N>]move the tab page to after tab page N, 0 for the first and none for the last, or N places
:open, :o, :e<file>...|<directory>open files
:open-empty-document, :nopen an empty [scratch] document in the view
:open-tab, :tabe[<file>]open a tab page after this one, with the file or a new [scratch] document
:pick-jobpick a running shell command to stop it
:pipe, :|<command>run the command for each selection, with its text as stdin, and put the output in its place
:pipe-to<command>run the command for each selection, with its text as stdin, and drop the output
:pop-directory, :popdgo to the newest directory of the stack, and remove it from the stack
:print-document[<file>]send the selection, or the document, to print-command, or to a PDF file
:push-directory, :pushd<directory>put the working directory on the stack, and change it to the directory
:put-diff-change, :diffpput each change under a range into the other file of the diff session
:quit, :qclose the view, and at the last view quit, but not with unsaved changes
:quit!, :q!close the view, and at the last view quit and drop the unsaved changes
:quit-all, :qaquit from every view, but not with unsaved changes
:quit-all!, :qa!quit from every view and drop the unsaved changes
:refresh-vcsask the vcs plugin again for the change id and the base of each shown file
:reload, :rl, :e!read the file again and drop the unsaved changes; u gives them back
:reload-all, :rlareload each open file as :reload does
:reload-configread the config, its theme, and the plugins again
:restart-language-servers[<name>...]stop each named language server of the file, or all of them, and start them again
:run-language-server-command[<command> [<json>...]]run a command of a language server of the file, with JSON arguments, or pick one
:run-shell-command, :sh, :!<command>run the command with the shell in the background, and show its output in a popup
:set-document-option, :setl[<key> <value>|<key>=<value>|<key>?]set an [editor] key for this document until the next reload, or show the values
:set-option, :set[<key> <value>|<key>=<value>|<key>?]set an [editor] key of config.toml until the next reload, or show the values
:set-theme<name>draw dk in another theme until the next reload
:show-aboutopen an [about] document with the version, the license, the build and the files of dk
:show-directory, :pwdshow the working directory on the last row
:show-directory-stackshow the stack of directories on the last row, newest first
:show-language-serversshow the language servers of the file, their state, and what they answer, in a popup
:show-messagesshow the last messages of the last row
:show-optionsopen an [options] document with every config.toml key at its default
:show-versionshow the version of dk on the last row
:split-view-below, :hs[<file>]split the view: the new view goes below, and shows the file
:split-view-right, :vs[<file>]split the view: the new view goes to the right, and shows the file
:start-language-servers[<name>...]start each named language server of the file that is not running, or all of them
:stop-language-servers[<name>...]stop each named language server of the file, or all of them, until :start-language-servers
:toggle-option, :toggle<key>flip an [editor] key that is true or false until the next reload, as :set does
:trusttrust the .ductus of this workspace as it is now, and load it
:write, :w[<file>]save the file, or save to another file and take its path
:write!, :w![<file>]save as :w does, but make a missing directory and write over a changed file
:write-all, :waformat and save each changed file, as :w does
:write-all!, :wa!format and save each changed file, as :w! does
:write-quit, :wq, :x[<file>]save, then quit, but not if the save fails
:write-quit!, :wq!, :x![<file>]save as :w! does, then quit as :q! does, but not if the save fails
:write-quit-all, :wqa, :xasave each changed file, then quit, but not if a save fails
:write-quit-all!, :wqa!, :xa!save each changed file as :w! does, then quit as :qa! does, also if a save fails

Default keys

Normal mode

KeyCommandDescription
:open-promptopen the prompt
hmove-character-leftmove left one grapheme
leftmove-character-leftmove left one grapheme
jmove-visual-line-downmove down one line
downmove-visual-line-downmove down one line
kmove-visual-line-upmove up one line
upmove-visual-line-upmove up one line
lmove-character-rightmove right one grapheme
rightmove-character-rightmove right one grapheme
homegoto-line-startgo to the start of the line
endgoto-line-endgo to the last grapheme of the line
tfind-till-characterselect to before the next match of the next key
ffind-next-characterselect to the next match of the next key
Tfind-till-previous-characterselect back to after the match of the next key
Ffind-previous-characterselect back to the match of the next key
rreplacereplace each character of the selection with the next key
Rreplace-with-yankedput the register in place of each selection
yyankyank the selection to the register
ppaste-afterpaste the register after each selection
Ppaste-beforepaste the register before each selection
"pick-registerpick the register of the next command
A-.repeat-last-motionrun the last motion again
.repeat-last-editrun the last change again on each selection
~switch-caseswitch the case of each selection
`switch-to-lowercasemake each selection lower case
A-`switch-to-uppercasemake each selection upper case
wmove-next-word-startselect to the start of the next word
bmove-previous-word-startselect to the start of the previous word
emove-next-word-endselect to the end of the next word
Wmove-next-long-word-startselect to the start of the next long word
Bmove-previous-long-word-startselect back to the start of a long word
Emove-next-long-word-endselect to the end of the next long word
ienter-insert-modeenter Insert mode
venter-select-modeenter Select mode
C-venter-block-modeenter Block mode: a range on each line of a rectangle
ainsert-after-selectioninsert after the selection
Cduplicate-ranges-on-next-lineadd a range on the line below each range
A-Cduplicate-ranges-on-previous-lineadd a range on the line above each range
,keep-primary-rangekeep only the primary range
A-;flip-rangesswap the anchor and the cursor of each selection
A-oexpand-selectionselect the parent syntax node of each selection
A-upexpand-selectionselect the parent syntax node of each selection
A-ishrink-selectiongo back to the selection before A-o, or select the first child node
A-downshrink-selectiongo back to the selection before A-o, or select the first child node
A-Iselect-all-childrenselect each named child node of each selection
A-S-downselect-all-childrenselect each named child node of each selection
A-pselect-previous-siblingselect the previous named sibling node
A-leftselect-previous-siblingselect the previous named sibling node
A-nselect-next-siblingselect the next named sibling node
A-rightselect-next-siblingselect the next named sibling node
A-aselect-all-siblingsselect each named sibling node of each selection
sselect-regexselect each regex match inside the selections
Ssplit-selectionsplit the selections at each regex match
Kkeep-rangeskeep the selections that match a regex
A-Kdrop-rangesremove the selections that match a regex
A-ssplit-selection-on-newlinesplit the selections into their lines
A-minusmerge-rangesmerge the selections into one
A-_merge-consecutive-rangesmerge the selections that touch
;collapse-selectionmake each selection a cursor
A-,drop-primary-rangeremove the primary selection
(rotate-ranges-backwardmake the previous selection primary
)rotate-ranges-forwardmake the next selection primary
A-(rotate-selection-contents-backwardmove the text of each selection to the previous one
A-)rotate-selection-contents-forwardmove the text of each selection to the next one
Xextend-to-line-boundsselect the whole lines of each selection
A-xshrink-to-line-boundsshrink each selection to the whole lines in it
>indentindent the lines of each selection
<unindentunindent the lines of each selection
Jjoin-linesjoin the lines of each selection
A-Jjoin-lines-select-spacesjoin the lines of each selection and select the spaces
&align-rangesalign the selections of each line in columns
_trim-selectiontrim the whitespace of each selection
cchange-selectiondelete the selection, then insert
A-cchange-selection-no-yankdelete the selection with no yank, then insert
ddelete-selectiondelete the selection
A-ddelete-selection-no-yankdelete the selection with no yank
uundoundo the last change
Uredoredo the last undone change
A-ugoto-earlier-revisionmove back to the change made before
A-Ugoto-later-revisionmove on to the change made after
C-ijump-forwardgo to the next jump on the jumplist
tabjump-forwardgo to the next jump on the jumplist
C-ojump-backwardgo back to the previous jump on the jumplist
C-ssave-selectionsave the selection to the jumplist
C-w wfocus-next-viewfocus the next view
C-w C-wfocus-next-viewfocus the next view
C-w ssplit-view-belowsplit the view: the new view goes below
C-w C-ssplit-view-belowsplit the view: the new view goes below
C-w vsplit-view-rightsplit the view: the new view goes to the right
C-w C-vsplit-view-rightsplit the view: the new view goes to the right
C-w qclose-viewclose the view
C-w C-qclose-viewclose the view
C-w oclose-other-viewsclose every other view
C-w C-oclose-other-viewsclose every other view
C-w hfocus-view-leftfocus the view to the left
C-w leftfocus-view-leftfocus the view to the left
C-w jfocus-view-downfocus the view below
C-w downfocus-view-downfocus the view below
C-w kfocus-view-upfocus the view above
C-w upfocus-view-upfocus the view above
C-w lfocus-view-rightfocus the view to the right
C-w rightfocus-view-rightfocus the view to the right
C-w Lmove-view-far-rightmove the view to the far right, with the full height
C-w Kmove-view-far-upmove the view to the top, with the full width
C-w Hmove-view-far-leftmove the view to the far left, with the full height
C-w Jmove-view-far-downmove the view to the bottom, with the full width
C-w +grow-view-heightmake the view one row taller, or N rows
C-w minusshrink-view-heightmake the view one row shorter, or N rows
C-w >grow-view-widthmake the view one column wider, or N columns
C-w <shrink-view-widthmake the view one column narrower, or N columns
C-w _set-view-heightmake the view as tall as it can be, or N rows
C-w |set-view-widthmake the view as wide as it can be, or N columns
C-w =equalize-viewsgive the views of each split the same size
C-ctoggle-commentscomment or uncomment the lines of each selection
space fpick-filepick a file of the workspace
space Fpick-file-in-document-directorypick a file under the directory of the document
space bpick-documentpick an open document
space jpick-jumppick a jump of the jumplists
space spick-symbolpick a symbol of the document
space Spick-workspace-symbolpick a symbol of the workspace
space dpick-diagnosticpick a diagnostic of the document
space Dpick-workspace-diagnosticpick a diagnostic of an open document
space gpick-changed-filepick a file that the working copy changes
space lpick-file-changepick a change of the file, and compare it with its parents
space Lpick-changepick a change of the repository, and show its patch
space 'reopen-last-pickeropen the picker that closed last
space upick-revisionpick a revision of the history
space yyank-to-clipboardyank the selection to the system clipboard
space Yyank-primary-range-to-clipboardyank the primary selection to the system clipboard
space ppaste-clipboard-afterpaste the system clipboard after each selection
space Ppaste-clipboard-beforepaste the system clipboard before each selection
space Rreplace-selection-with-clipboardput the system clipboard in place of each selection
space /search-workspacesearch the working directory for a regex
space kshow-hovershow docs for the item under the cursor
space rrename-symbolrename the symbol under the cursor with a language server
space hselect-symbol-referencesselect each use of the symbol under the cursor
space apick-code-actionpick a code action of the language servers
space Kshow-signature-helpshow signature help
space ctoggle-commentscomment or uncomment the lines of each selection
space ?pick-commandpick a command and run it
space !pick-jobpick a running shell command to stop it
space Bblame-lineshow the change of the cursor line
g *search-selectionuse the selection as the search pattern
g +goto-later-revisionmove on to the change made after
g ,goto-newer-revision-positiongo to a newer revision position, or N newer
g .goto-last-revision-positiongo to the revision position of the current revision
g 8show-character-infoshow the code points of the grapheme at the cursor
g ;goto-older-revision-positiongo to an older revision position, or N older
g agoto-last-accessed-documentshow the document that the view showed last
g dgoto-definitiongo to the definition of the symbol
g Dgoto-declarationgo to the declaration of the symbol
g egoto-last-linego to the last line
g fgoto-fileopen the file named at the cursor or by each selection
g Fgoto-file-lineopen the file named at the cursor, at the line after its name
g ggoto-document-startgo to the first line, or to line N with a count
g hgoto-line-startgo to the start of the line
g igoto-implementationgo to the implementation of the symbol
g Iinsert-at-last-insertinsert where Insert mode ended the last time
g jmove-line-downmove down one text line
g Jjoin-lines-no-spacejoin the lines of each selection with no space
g kmove-line-upmove up one text line
g lgoto-line-endgo to the last grapheme of the line
g mgoto-last-modified-documentshow the document that the view left last with a change
g Mgoto-line-middlego to the middle of the line, or to N percent of it
g minusgoto-earlier-revisionmove back to the change made before
g ngoto-next-documentshow the next open document
g pgoto-previous-documentshow the previous open document
g qreflow-selectionfill each paragraph of each selection to text-width
g rgoto-referencego to the references of the symbol
g sgoto-first-non-whitespacego to the first character of the line that is not whitespace
g tgoto-next-tabgo to the next tab page, or to tab page N
C-pagedowngoto-next-tabgo to the next tab page, or to tab page N
g Tgoto-previous-tabgo to the previous tab page, or N back
C-pageupgoto-previous-tabgo to the previous tab page, or N back
g vselect-last-selectionselect the last selection again
g wgoto-wordgo to a two-character label
g ygoto-type-definitiongo to the type definition of the symbol
g |goto-columngo to grapheme N of the line
] ggoto-next-hunkgo to the next change
[ ggoto-previous-hunkgo to the previous change
] Ggoto-last-hunkgo to the last change
[ Ggoto-first-hunkgo to the first change
] fgoto-next-functiongo to the next function
[ fgoto-previous-functiongo to the previous function
] tgoto-next-classgo to the next type definition
[ tgoto-previous-classgo to the previous type definition
] agoto-next-parametergo to the next parameter
[ agoto-previous-parametergo to the previous parameter
] cgoto-next-commentgo to the next comment
[ cgoto-previous-commentgo to the previous comment
] egoto-next-entrygo to the next pairing
[ egoto-previous-entrygo to the previous pairing
] Tgoto-next-testgo to the next test
[ Tgoto-previous-testgo to the previous test
] pgoto-next-paragraphgo to the next paragraph
[ pgoto-previous-paragraphgo to the previous paragraph
] xgoto-next-xml-elementgo to the next (X)HTML element
[ xgoto-previous-xml-elementgo to the previous (X)HTML element
Ggoto-linego to line N with a count, or to the last line
Hgoto-view-topgo to the top of the view, or to row N with a count
Mgoto-view-centergo to the middle of the view
Lgoto-view-bottomgo to the bottom of the view, or to row N from it
%select-allselect the whole text
=format-selectionformat the selection with a language server
Iinsert-at-line-startinsert at the first character of the line
Ainsert-at-line-endinsert at the end of the line
oopen-line-belowadd a line below each range, then insert
Oopen-line-aboveadd a line above each range, then insert
m mgoto-matching-bracketgo to the bracket that matches the one at the cursor
m sadd-surroundsurround each selection with the pair of the next key
m rreplace-surroundreplace the pair of the next key around each selection
m ddelete-surrounddelete the pair of the next key around each selection
m aselect-text-object-aroundselect around the object of the next key
m iselect-text-object-innerselect inside the object of the next key
xextend-line-belowselect the line, or add the line below
|piperun the command for each selection, with its text as stdin, and put the output in its place
A-|pipe-torun the command for each selection, with its text as stdin, and drop the output
!insert-outputrun the command once, and put its output before each selection
A-!append-outputrun the command once, and put its output after each selection
C-zsuspendstop dk and go back to the shell; fg brings it back
C-aincrementincrement the item under the cursor
C-xdecrementdecrement the item under the cursor
C-bscroll-page-upscroll up one page
pageupscroll-page-upscroll up one page
C-fscroll-page-downscroll down one page
pagedownscroll-page-downscroll down one page
C-uscroll-half-page-upscroll and move every range up half a page
C-dscroll-half-page-downscroll and move every range down half a page
z zalign-view-centerput the cursor line on the middle row of the view
z calign-view-centerput the cursor line on the middle row of the view
z talign-view-topput the cursor line on the first row of the view
z balign-view-bottomput the cursor line on the last row of the view
z malign-view-middleput the cursor column in the middle of the view
z kscroll-upscroll the view up a count of lines
z upscroll-upscroll the view up a count of lines
z jscroll-downscroll the view down a count of lines
z downscroll-downscroll the view down a count of lines
z C-bscroll-page-upscroll up one page
z pageupscroll-page-upscroll up one page
z C-fscroll-page-downscroll down one page
z pagedownscroll-page-downscroll down one page
z C-uscroll-half-page-upscroll and move every range up half a page
z backspacescroll-half-page-upscroll and move every range up half a page
z C-dscroll-half-page-downscroll and move every range down half a page
z spacescroll-half-page-downscroll and move every range down half a page
Z zalign-view-centerput the cursor line on the middle row of the view
Z calign-view-centerput the cursor line on the middle row of the view
Z talign-view-topput the cursor line on the first row of the view
Z balign-view-bottomput the cursor line on the last row of the view
Z malign-view-middleput the cursor column in the middle of the view
Z kscroll-upscroll the view up a count of lines
Z upscroll-upscroll the view up a count of lines
Z jscroll-downscroll the view down a count of lines
Z downscroll-downscroll the view down a count of lines
Z C-bscroll-page-upscroll up one page
Z pageupscroll-page-upscroll up one page
Z C-fscroll-page-downscroll down one page
Z pagedownscroll-page-downscroll down one page
Z C-uscroll-half-page-upscroll and move every range up half a page
Z backspacescroll-half-page-upscroll and move every range up half a page
Z C-dscroll-half-page-downscroll and move every range down half a page
Z spacescroll-half-page-downscroll and move every range down half a page
/searchsearch for a regex
z /searchsearch for a regex
Z /searchsearch for a regex
?search-backwardsearch back for a regex
z ?search-backwardsearch back for a regex
Z ?search-backwardsearch back for a regex
nsearch-nextselect the next search match
z nsearch-nextselect the next search match
Z nsearch-nextselect the next search match
Nsearch-previousselect the previous search match
z Nsearch-previousselect the previous search match
Z Nsearch-previousselect the previous search match
*search-selection-detect-word-boundariesuse the selection as the search pattern, with word boundaries
A-*search-selectionuse the selection as the search pattern
C-escroll-downscroll the view down a count of lines
C-yscroll-upscroll the view up a count of lines

Insert mode

KeyCommandDescription
escenter-normal-modereturn to Normal mode
C-scommit-revisionmake an undo step of the text typed so far
C-xshow-completionsask the language servers for completions
C-rinsert-registerpaste a register at each cursor
C-gshow-signature-helpshow signature help
C-jinsert-newlineadd a line break
retinsert-newlineadd a line break
C-wdelete-word-backwarddelete back to the start of the word
A-backspacedelete-word-backwarddelete back to the start of the word
A-ddelete-word-forwarddelete to the end of the word
A-deldelete-word-forwarddelete to the end of the word
C-udelete-to-line-startdelete back to the indent, then to the line start
C-kdelete-to-line-enddelete to the end of the line
C-hdelete-character-backwarddelete the grapheme before the cursor
backspacedelete-character-backwarddelete the grapheme before the cursor
S-backspacedelete-character-backwarddelete the grapheme before the cursor
C-ddelete-character-forwarddelete the grapheme at the cursor
deldelete-character-forwarddelete the grapheme at the cursor
upmove-visual-line-upmove up one line
downmove-visual-line-downmove down one line
leftmove-character-leftmove left one grapheme
rightmove-character-rightmove right one grapheme
pageupscroll-page-upscroll up one page
pagedownscroll-page-downscroll down one page
homegoto-line-startgo to the start of the line
endgoto-line-endinggo to the line ending
tabsmart-tabselect the next tab stop of the snippet
S-tabinsert-tab-characterinsert a tab, or spaces to the next indent column
any textinsert-texttype it at the cursor

Select mode

KeyCommandDescription
:open-promptopen the prompt
hextend-character-leftextend left one grapheme
leftextend-character-leftextend left one grapheme
jextend-visual-line-downextend down one line
downextend-visual-line-downextend down one line
kextend-visual-line-upextend up one line
upextend-visual-line-upextend up one line
lextend-character-rightextend right one grapheme
rightextend-character-rightextend right one grapheme
textend-till-characterextend to before the next match of the next key
fextend-next-characterextend to the next match of the next key
Textend-till-previous-characterextend back to after the match of the next key
Fextend-previous-characterextend back to the match of the next key
homeextend-to-line-startextend to the start of the line
endextend-to-line-endextend to the end of the line
rreplacereplace each character of the selection with the next key
Rreplace-with-yankedput the register in place of each selection
yyankyank the selection to the register
ppaste-afterpaste the register after each selection
Ppaste-beforepaste the register before each selection
"pick-registerpick the register of the next command
A-.repeat-last-motionrun the last motion again
.repeat-last-editrun the last change again on each selection
~switch-caseswitch the case of each selection
`switch-to-lowercasemake each selection lower case
A-`switch-to-uppercasemake each selection upper case
wextend-next-word-startextend to the start of the next word
bextend-previous-word-startextend to the start of the previous word
eextend-next-word-endextend to the end of the next word
Wextend-next-long-word-startextend to the start of the next long word
Bextend-previous-long-word-startextend back to the start of a long word
Eextend-next-long-word-endextend to the end of the next long word
ienter-insert-modeenter Insert mode
escexit-select-modereturn to Normal mode
venter-normal-modereturn to Normal mode
C-venter-block-modeenter Block mode: a range on each line of a rectangle
ainsert-after-selectioninsert after the selection
Cduplicate-ranges-on-next-lineadd a range on the line below each range
A-Cduplicate-ranges-on-previous-lineadd a range on the line above each range
,keep-primary-rangekeep only the primary range
A-;flip-rangesswap the anchor and the cursor of each selection
A-oexpand-selectionselect the parent syntax node of each selection
A-upexpand-selectionselect the parent syntax node of each selection
A-ishrink-selectiongo back to the selection before A-o, or select the first child node
A-downshrink-selectiongo back to the selection before A-o, or select the first child node
A-Iselect-all-childrenselect each named child node of each selection
A-S-downselect-all-childrenselect each named child node of each selection
A-pselect-previous-siblingselect the previous named sibling node
A-leftselect-previous-siblingselect the previous named sibling node
A-nselect-next-siblingselect the next named sibling node
A-rightselect-next-siblingselect the next named sibling node
A-aselect-all-siblingsselect each named sibling node of each selection
sselect-regexselect each regex match inside the selections
Ssplit-selectionsplit the selections at each regex match
Kkeep-rangeskeep the selections that match a regex
A-Kdrop-rangesremove the selections that match a regex
A-ssplit-selection-on-newlinesplit the selections into their lines
A-minusmerge-rangesmerge the selections into one
A-_merge-consecutive-rangesmerge the selections that touch
;collapse-selectionmake each selection a cursor
A-,drop-primary-rangeremove the primary selection
(rotate-ranges-backwardmake the previous selection primary
)rotate-ranges-forwardmake the next selection primary
A-(rotate-selection-contents-backwardmove the text of each selection to the previous one
A-)rotate-selection-contents-forwardmove the text of each selection to the next one
Xextend-to-line-boundsselect the whole lines of each selection
A-xshrink-to-line-boundsshrink each selection to the whole lines in it
>indentindent the lines of each selection
<unindentunindent the lines of each selection
Jjoin-linesjoin the lines of each selection
A-Jjoin-lines-select-spacesjoin the lines of each selection and select the spaces
&align-rangesalign the selections of each line in columns
_trim-selectiontrim the whitespace of each selection
cchange-selectiondelete the selection, then insert
A-cchange-selection-no-yankdelete the selection with no yank, then insert
ddelete-selectiondelete the selection
A-ddelete-selection-no-yankdelete the selection with no yank
uundoundo the last change
Uredoredo the last undone change
C-ijump-forwardgo to the next jump on the jumplist
tabjump-forwardgo to the next jump on the jumplist
C-ojump-backwardgo back to the previous jump on the jumplist
C-ssave-selectionsave the selection to the jumplist
C-w wfocus-next-viewfocus the next view
C-w C-wfocus-next-viewfocus the next view
C-w ssplit-view-belowsplit the view: the new view goes below
C-w C-ssplit-view-belowsplit the view: the new view goes below
C-w vsplit-view-rightsplit the view: the new view goes to the right
C-w C-vsplit-view-rightsplit the view: the new view goes to the right
C-w qclose-viewclose the view
C-w C-qclose-viewclose the view
C-w oclose-other-viewsclose every other view
C-w C-oclose-other-viewsclose every other view
C-w hfocus-view-leftfocus the view to the left
C-w leftfocus-view-leftfocus the view to the left
C-w jfocus-view-downfocus the view below
C-w downfocus-view-downfocus the view below
C-w kfocus-view-upfocus the view above
C-w upfocus-view-upfocus the view above
C-w lfocus-view-rightfocus the view to the right
C-w rightfocus-view-rightfocus the view to the right
C-w Lmove-view-far-rightmove the view to the far right, with the full height
C-w Kmove-view-far-upmove the view to the top, with the full width
C-w Hmove-view-far-leftmove the view to the far left, with the full height
C-w Jmove-view-far-downmove the view to the bottom, with the full width
C-w +grow-view-heightmake the view one row taller, or N rows
C-w minusshrink-view-heightmake the view one row shorter, or N rows
C-w >grow-view-widthmake the view one column wider, or N columns
C-w <shrink-view-widthmake the view one column narrower, or N columns
C-w _set-view-heightmake the view as tall as it can be, or N rows
C-w |set-view-widthmake the view as wide as it can be, or N columns
C-w =equalize-viewsgive the views of each split the same size
C-ctoggle-commentscomment or uncomment the lines of each selection
space fpick-filepick a file of the workspace
space Fpick-file-in-document-directorypick a file under the directory of the document
space bpick-documentpick an open document
space jpick-jumppick a jump of the jumplists
space spick-symbolpick a symbol of the document
space Spick-workspace-symbolpick a symbol of the workspace
space dpick-diagnosticpick a diagnostic of the document
space Dpick-workspace-diagnosticpick a diagnostic of an open document
space gpick-changed-filepick a file that the working copy changes
space lpick-file-changepick a change of the file, and compare it with its parents
space Lpick-changepick a change of the repository, and show its patch
space 'reopen-last-pickeropen the picker that closed last
space upick-revisionpick a revision of the history
space yyank-to-clipboardyank the selection to the system clipboard
space Yyank-primary-range-to-clipboardyank the primary selection to the system clipboard
space ppaste-clipboard-afterpaste the system clipboard after each selection
space Ppaste-clipboard-beforepaste the system clipboard before each selection
space Rreplace-selection-with-clipboardput the system clipboard in place of each selection
space /search-workspacesearch the working directory for a regex
space kshow-hovershow docs for the item under the cursor
space rrename-symbolrename the symbol under the cursor with a language server
space hselect-symbol-referencesselect each use of the symbol under the cursor
space apick-code-actionpick a code action of the language servers
space Kshow-signature-helpshow signature help
space ctoggle-commentscomment or uncomment the lines of each selection
space ?pick-commandpick a command and run it
space !pick-jobpick a running shell command to stop it
space Bblame-lineshow the change of the cursor line
g *search-selectionuse the selection as the search pattern
g ,goto-newer-revision-positiongo to a newer revision position, or N newer
g .goto-last-revision-positiongo to the revision position of the current revision
g 8show-character-infoshow the code points of the grapheme at the cursor
g ;goto-older-revision-positiongo to an older revision position, or N older
g agoto-last-accessed-documentshow the document that the view showed last
g dgoto-definitiongo to the definition of the symbol
g Dgoto-declarationgo to the declaration of the symbol
g eextend-to-last-lineextend to the last line
g fgoto-fileopen the file named at the cursor or by each selection
g Fgoto-file-lineopen the file named at the cursor, at the line after its name
g gextend-to-document-startextend to the first line, or to line N with a count
g hextend-to-line-startextend to the start of the line
g igoto-implementationgo to the implementation of the symbol
g Iinsert-at-last-insertinsert where Insert mode ended the last time
g jextend-line-downextend down one text line
g Jjoin-lines-no-spacejoin the lines of each selection with no space
g kextend-line-upextend up one text line
g lextend-to-line-endextend to the end of the line
g mgoto-last-modified-documentshow the document that the view left last with a change
g Mextend-to-line-middleextend to the middle of the line, or to N percent of it
g ngoto-next-documentshow the next open document
g pgoto-previous-documentshow the previous open document
g qreflow-selectionfill each paragraph of each selection to text-width
g rgoto-referencego to the references of the symbol
g sextend-to-first-non-whitespaceextend to the first character of the line that is not whitespace
g tgoto-next-tabgo to the next tab page, or to tab page N
C-pagedowngoto-next-tabgo to the next tab page, or to tab page N
g Tgoto-previous-tabgo to the previous tab page, or N back
C-pageupgoto-previous-tabgo to the previous tab page, or N back
g vselect-last-selectionselect the last selection again
g wextend-to-wordextend to a two-character label
g ygoto-type-definitiongo to the type definition of the symbol
g |extend-to-columnextend to grapheme N of the line
] ggoto-next-hunkgo to the next change
[ ggoto-previous-hunkgo to the previous change
] Ggoto-last-hunkgo to the last change
[ Ggoto-first-hunkgo to the first change
] fgoto-next-functiongo to the next function
[ fgoto-previous-functiongo to the previous function
] tgoto-next-classgo to the next type definition
[ tgoto-previous-classgo to the previous type definition
] agoto-next-parametergo to the next parameter
[ agoto-previous-parametergo to the previous parameter
] cgoto-next-commentgo to the next comment
[ cgoto-previous-commentgo to the previous comment
] egoto-next-entrygo to the next pairing
[ egoto-previous-entrygo to the previous pairing
] Tgoto-next-testgo to the next test
[ Tgoto-previous-testgo to the previous test
] pgoto-next-paragraphgo to the next paragraph
[ pgoto-previous-paragraphgo to the previous paragraph
] xgoto-next-xml-elementgo to the next (X)HTML element
[ xgoto-previous-xml-elementgo to the previous (X)HTML element
Ggoto-linego to line N with a count, or to the last line
Hgoto-view-topgo to the top of the view, or to row N with a count
Mgoto-view-centergo to the middle of the view
Lgoto-view-bottomgo to the bottom of the view, or to row N from it
%select-allselect the whole text
=format-selectionformat the selection with a language server
Iinsert-at-line-startinsert at the first character of the line
Ainsert-at-line-endinsert at the end of the line
oopen-line-belowadd a line below each range, then insert
Oopen-line-aboveadd a line above each range, then insert
m mgoto-matching-bracketgo to the bracket that matches the one at the cursor
m sadd-surroundsurround each selection with the pair of the next key
m rreplace-surroundreplace the pair of the next key around each selection
m ddelete-surrounddelete the pair of the next key around each selection
m aselect-text-object-aroundselect around the object of the next key
m iselect-text-object-innerselect inside the object of the next key
xextend-line-belowselect the line, or add the line below
|piperun the command for each selection, with its text as stdin, and put the output in its place
A-|pipe-torun the command for each selection, with its text as stdin, and drop the output
!insert-outputrun the command once, and put its output before each selection
A-!append-outputrun the command once, and put its output after each selection
C-zsuspendstop dk and go back to the shell; fg brings it back
C-aincrementincrement the item under the cursor
C-xdecrementdecrement the item under the cursor
C-bscroll-page-upscroll up one page
pageupscroll-page-upscroll up one page
C-fscroll-page-downscroll down one page
pagedownscroll-page-downscroll down one page
C-uscroll-half-page-upscroll and move every range up half a page
C-dscroll-half-page-downscroll and move every range down half a page
z zalign-view-centerput the cursor line on the middle row of the view
z calign-view-centerput the cursor line on the middle row of the view
z talign-view-topput the cursor line on the first row of the view
z balign-view-bottomput the cursor line on the last row of the view
z malign-view-middleput the cursor column in the middle of the view
z kscroll-upscroll the view up a count of lines
z upscroll-upscroll the view up a count of lines
z jscroll-downscroll the view down a count of lines
z downscroll-downscroll the view down a count of lines
z C-bscroll-page-upscroll up one page
z pageupscroll-page-upscroll up one page
z C-fscroll-page-downscroll down one page
z pagedownscroll-page-downscroll down one page
z C-uscroll-half-page-upscroll and move every range up half a page
z backspacescroll-half-page-upscroll and move every range up half a page
z C-dscroll-half-page-downscroll and move every range down half a page
z spacescroll-half-page-downscroll and move every range down half a page
Z zalign-view-centerput the cursor line on the middle row of the view
Z calign-view-centerput the cursor line on the middle row of the view
Z talign-view-topput the cursor line on the first row of the view
Z balign-view-bottomput the cursor line on the last row of the view
Z malign-view-middleput the cursor column in the middle of the view
Z kscroll-upscroll the view up a count of lines
Z upscroll-upscroll the view up a count of lines
Z jscroll-downscroll the view down a count of lines
Z downscroll-downscroll the view down a count of lines
Z C-bscroll-page-upscroll up one page
Z pageupscroll-page-upscroll up one page
Z C-fscroll-page-downscroll down one page
Z pagedownscroll-page-downscroll down one page
Z C-uscroll-half-page-upscroll and move every range up half a page
Z backspacescroll-half-page-upscroll and move every range up half a page
Z C-dscroll-half-page-downscroll and move every range down half a page
Z spacescroll-half-page-downscroll and move every range down half a page
/searchsearch for a regex
z /searchsearch for a regex
Z /searchsearch for a regex
?search-backwardsearch back for a regex
z ?search-backwardsearch back for a regex
Z ?search-backwardsearch back for a regex
z nsearch-nextselect the next search match
Z nsearch-nextselect the next search match
z Nsearch-previousselect the previous search match
Z Nsearch-previousselect the previous search match
nextend-search-nextadd the next search match as a selection
Nextend-search-previousadd the previous search match as a selection
*search-selection-detect-word-boundariesuse the selection as the search pattern, with word boundaries
A-*search-selectionuse the selection as the search pattern
C-escroll-downscroll the view down a count of lines
C-yscroll-upscroll the view up a count of lines

Block mode

KeyCommandDescription
:open-promptopen the prompt
C-venter-normal-modereturn to Normal mode
$extend-to-line-endextend to the end of the line
oflip-block-cornersin Block mode, go to the opposite corner
Oflip-block-columnsin Block mode, go to the other corner on the same line

Command-line editing keys

The keys of the : prompt. [keys] does not bind them.

KeyDescription
retrun the line
up, C-pshow an older command line
down, C-nshow a newer command line
escclose the prompt
left, C-bmove left one grapheme
right, C-fmove right one grapheme
home, C-amove to the start of the line
end, C-emove to the end of the line
backspace, C-hdelete the grapheme before the cursor, or close an empty line
del, C-ddelete the grapheme under the cursor
C-udelete to the start of the line
C-kdelete to the end of the line
C-w, A-backspacedelete the word before the cursor
tabcomplete the line, or select the next match
S-tabselect the previous match
C-rinsert the first value of a register
any texttype it at the cursor

Key commands

A key of [keys] in config.toml binds these names.

NameDescription
add-surroundsurround each selection with the pair of the next key
align-rangesalign the selections of each line in columns
align-view-bottomput the cursor line on the last row of the view
align-view-centerput the cursor line on the middle row of the view
align-view-middleput the cursor column in the middle of the view
align-view-topput the cursor line on the first row of the view
annotateshow or hide the change of each line in a column of the gutter
append-outputrun the command once, and put its output after each selection
blame-lineshow the change of the cursor line
change-selectiondelete the selection, then insert
change-selection-no-yankdelete the selection with no yank, then insert
close-other-viewsclose every other view
close-viewclose the view
collapse-selectionmake each selection a cursor
commit-revisionmake an undo step of the text typed so far
decrementdecrement the item under the cursor
delete-character-backwarddelete the grapheme before the cursor
delete-character-forwarddelete the grapheme at the cursor
delete-selectiondelete the selection
delete-selection-no-yankdelete the selection with no yank
delete-surrounddelete the pair of the next key around each selection
delete-to-line-enddelete to the end of the line
delete-to-line-startdelete back to the indent, then to the line start
delete-word-backwarddelete back to the start of the word
delete-word-forwarddelete to the end of the word
diff-baseshow the vcs base of the file and the file in a diff session
drop-primary-rangeremove the primary selection
drop-rangesremove the selections that match a regex
duplicate-ranges-on-next-lineadd a range on the line below each range
duplicate-ranges-on-previous-lineadd a range on the line above each range
ensure-ranges-forwardmake each selection face forward
enter-block-modeenter Block mode: a range on each line of a rectangle
enter-insert-modeenter Insert mode
enter-normal-modereturn to Normal mode
enter-select-modeenter Select mode
equalize-viewsgive the views of each split the same size
exit-select-modereturn to Normal mode
expand-selectionselect the parent syntax node of each selection
extend-character-leftextend left one grapheme
extend-character-rightextend right one grapheme
extend-line-belowselect the line, or add the line below
extend-line-downextend down one text line
extend-line-upextend up one text line
extend-next-characterextend to the next match of the next key
extend-next-long-word-endextend to the end of the next long word
extend-next-long-word-startextend to the start of the next long word
extend-next-word-endextend to the end of the next word
extend-next-word-startextend to the start of the next word
extend-previous-characterextend back to the match of the next key
extend-previous-long-word-startextend back to the start of a long word
extend-previous-word-startextend to the start of the previous word
extend-search-nextadd the next search match as a selection
extend-search-previousadd the previous search match as a selection
extend-till-characterextend to before the next match of the next key
extend-till-previous-characterextend back to after the match of the next key
extend-to-columnextend to grapheme N of the line
extend-to-document-startextend to the first line, or to line N with a count
extend-to-first-non-whitespaceextend to the first character of the line that is not whitespace
extend-to-last-lineextend to the last line
extend-to-line-boundsselect the whole lines of each selection
extend-to-line-endextend to the end of the line
extend-to-line-middleextend to the middle of the line, or to N percent of it
extend-to-line-startextend to the start of the line
extend-to-wordextend to a two-character label
extend-visual-line-downextend down one line
extend-visual-line-upextend up one line
find-next-characterselect to the next match of the next key
find-previous-characterselect back to the match of the next key
find-till-characterselect to before the next match of the next key
find-till-previous-characterselect back to after the match of the next key
flip-block-columnsin Block mode, go to the other corner on the same line
flip-block-cornersin Block mode, go to the opposite corner
flip-rangesswap the anchor and the cursor of each selection
focus-next-viewfocus the next view
focus-view-downfocus the view below
focus-view-leftfocus the view to the left
focus-view-rightfocus the view to the right
focus-view-upfocus the view above
format-selectionformat the selection with a language server
goto-columngo to grapheme N of the line
goto-declarationgo to the declaration of the symbol
goto-definitiongo to the definition of the symbol
goto-document-startgo to the first line, or to line N with a count
goto-earlier-revisionmove back to the change made before
goto-fileopen the file named at the cursor or by each selection
goto-file-lineopen the file named at the cursor, at the line after its name
goto-first-hunkgo to the first change
goto-first-non-whitespacego to the first character of the line that is not whitespace
goto-implementationgo to the implementation of the symbol
goto-last-accessed-documentshow the document that the view showed last
goto-last-hunkgo to the last change
goto-last-linego to the last line
goto-last-modified-documentshow the document that the view left last with a change
goto-last-revision-positiongo to the revision position of the current revision
goto-later-revisionmove on to the change made after
goto-linego to line N with a count, or to the last line
goto-line-endgo to the last grapheme of the line
goto-line-endinggo to the line ending
goto-line-middlego to the middle of the line, or to N percent of it
goto-line-startgo to the start of the line
goto-matching-bracketgo to the bracket that matches the one at the cursor
goto-newer-revision-positiongo to a newer revision position, or N newer
goto-next-classgo to the next type definition
goto-next-commentgo to the next comment
goto-next-documentshow the next open document
goto-next-entrygo to the next pairing
goto-next-functiongo to the next function
goto-next-hunkgo to the next change
goto-next-paragraphgo to the next paragraph
goto-next-parametergo to the next parameter
goto-next-tabgo to the next tab page, or to tab page N
goto-next-tab-stopselect the next tab stop of the snippet
goto-next-testgo to the next test
goto-next-xml-elementgo to the next (X)HTML element
goto-older-revision-positiongo to an older revision position, or N older
goto-previous-classgo to the previous type definition
goto-previous-commentgo to the previous comment
goto-previous-documentshow the previous open document
goto-previous-entrygo to the previous pairing
goto-previous-functiongo to the previous function
goto-previous-hunkgo to the previous change
goto-previous-paragraphgo to the previous paragraph
goto-previous-parametergo to the previous parameter
goto-previous-tabgo to the previous tab page, or N back
goto-previous-tab-stopselect the previous tab stop of the snippet
goto-previous-testgo to the previous test
goto-previous-xml-elementgo to the previous (X)HTML element
goto-referencego to the references of the symbol
goto-type-definitiongo to the type definition of the symbol
goto-view-bottomgo to the bottom of the view, or to row N from it
goto-view-centergo to the middle of the view
goto-view-topgo to the top of the view, or to row N with a count
goto-wordgo to a two-character label
grow-view-heightmake the view one row taller, or N rows
grow-view-widthmake the view one column wider, or N columns
hide-search-matcheshide the matches of the search pattern until the next search
incrementincrement the item under the cursor
indentindent the lines of each selection
insert-after-selectioninsert after the selection
insert-at-last-insertinsert where Insert mode ended the last time
insert-at-line-endinsert at the end of the line
insert-at-line-startinsert at the first character of the line
insert-newlineadd a line break
insert-outputrun the command once, and put its output before each selection
insert-registerpaste a register at each cursor
insert-tab-characterinsert a tab, or spaces to the next indent column
join-linesjoin the lines of each selection
join-lines-no-spacejoin the lines of each selection with no space
join-lines-select-spacesjoin the lines of each selection and select the spaces
jump-backwardgo back to the previous jump on the jumplist
jump-forwardgo to the next jump on the jumplist
keep-primary-rangekeep only the primary range
keep-rangeskeep the selections that match a regex
merge-consecutive-rangesmerge the selections that touch
merge-rangesmerge the selections into one
move-character-leftmove left one grapheme
move-character-rightmove right one grapheme
move-line-downmove down one text line
move-line-upmove up one text line
move-next-long-word-endselect to the end of the next long word
move-next-long-word-startselect to the start of the next long word
move-next-word-endselect to the end of the next word
move-next-word-startselect to the start of the next word
move-previous-long-word-startselect back to the start of a long word
move-previous-word-startselect to the start of the previous word
move-view-far-downmove the view to the bottom, with the full width
move-view-far-leftmove the view to the far left, with the full height
move-view-far-rightmove the view to the far right, with the full height
move-view-far-upmove the view to the top, with the full width
move-visual-line-downmove down one line
move-visual-line-upmove up one line
open-line-aboveadd a line above each range, then insert
open-line-belowadd a line below each range, then insert
open-promptopen the prompt
paste-afterpaste the register after each selection
paste-beforepaste the register before each selection
paste-clipboard-afterpaste the system clipboard after each selection
paste-clipboard-beforepaste the system clipboard before each selection
pick-changepick a change of the repository, and show its patch
pick-changed-filepick a file that the working copy changes
pick-code-actionpick a code action of the language servers
pick-commandpick a command and run it
pick-diagnosticpick a diagnostic of the document
pick-documentpick an open document
pick-filepick a file of the workspace
pick-file-changepick a change of the file, and compare it with its parents
pick-file-in-document-directorypick a file under the directory of the document
pick-jobpick a running shell command to stop it
pick-jumppick a jump of the jumplists
pick-registerpick the register of the next command
pick-revisionpick a revision of the history
pick-symbolpick a symbol of the document
pick-workspace-diagnosticpick a diagnostic of an open document
pick-workspace-symbolpick a symbol of the workspace
piperun the command for each selection, with its text as stdin, and put the output in its place
pipe-torun the command for each selection, with its text as stdin, and drop the output
redoredo the last undone change
reflow-selectionfill each paragraph of each selection to text-width
refresh-vcsask the vcs plugin again for the change id and the base of each shown file
rename-symbolrename the symbol under the cursor with a language server
reopen-last-pickeropen the picker that closed last
repeat-last-editrun the last change again on each selection
repeat-last-motionrun the last motion again
replacereplace each character of the selection with the next key
replace-selection-with-clipboardput the system clipboard in place of each selection
replace-surroundreplace the pair of the next key around each selection
replace-with-yankedput the register in place of each selection
rotate-ranges-backwardmake the previous selection primary
rotate-ranges-forwardmake the next selection primary
rotate-selection-contents-backwardmove the text of each selection to the previous one
rotate-selection-contents-forwardmove the text of each selection to the next one
save-selectionsave the selection to the jumplist
scroll-downscroll the view down a count of lines
scroll-half-page-downscroll and move every range down half a page
scroll-half-page-upscroll and move every range up half a page
scroll-page-downscroll down one page
scroll-page-upscroll up one page
scroll-upscroll the view up a count of lines
searchsearch for a regex
search-backwardsearch back for a regex
search-nextselect the next search match
search-previousselect the previous search match
search-selectionuse the selection as the search pattern
search-selection-detect-word-boundariesuse the selection as the search pattern, with word boundaries
search-workspacesearch the working directory for a regex
select-allselect the whole text
select-all-childrenselect each named child node of each selection
select-all-siblingsselect each named sibling node of each selection
select-last-selectionselect the last selection again
select-next-siblingselect the next named sibling node
select-previous-siblingselect the previous named sibling node
select-regexselect each regex match inside the selections
select-symbol-referencesselect each use of the symbol under the cursor
select-text-object-aroundselect around the object of the next key
select-text-object-innerselect inside the object of the next key
set-view-heightmake the view as tall as it can be, or N rows
set-view-widthmake the view as wide as it can be, or N columns
show-character-infoshow the code points of the grapheme at the cursor
show-completionsask the language servers for completions
show-hovershow docs for the item under the cursor
show-signature-helpshow signature help
shrink-selectiongo back to the selection before A-o, or select the first child node
shrink-to-line-boundsshrink each selection to the whole lines in it
shrink-view-heightmake the view one row shorter, or N rows
shrink-view-widthmake the view one column narrower, or N columns
smart-tabselect the next tab stop of the snippet
split-selectionsplit the selections at each regex match
split-selection-on-newlinesplit the selections into their lines
split-view-belowsplit the view: the new view goes below
split-view-rightsplit the view: the new view goes to the right
suspendstop dk and go back to the shell; fg brings it back
switch-caseswitch the case of each selection
switch-to-lowercasemake each selection lower case
switch-to-uppercasemake each selection upper case
toggle-commentscomment or uncomment the lines of each selection
trim-selectiontrim the whitespace of each selection
undoundo the last change
unindentunindent the lines of each selection
yankyank the selection to the register
yank-primary-range-to-clipboardyank the primary selection to the system clipboard
yank-to-clipboardyank the selection to the system clipboard