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

Default keybindings

Every binding below can be changed; see Keybindings. <leader> is Space unless you set keys.leader.

Key notation

Canonical notation is Vim’s. Parsing is case-insensitive for names inside <> and case-sensitive for plain characters.

FormExamplesNotes
Printable characterj, G, *, /, ?, :G is Shift+g; never write <S-g> (normalised to G)
Named keys<CR> (<Enter>, <Return>), <Esc>, <Tab>, <S-Tab>, <BS>, <Del>, <Space>, <Up>, <Down>, <Left>, <Right>, <Home>, <End>, <PageUp>, <PageDown>, <Insert>, <F1>…<F12>, <lt> (literal <), <Bar> (``)
Modifiers<C-d>, <A-x> (= <M-x>), <C-A-x>, <S-Up>, <C-S-x><C-S-…> needs keyboard enhancement (§7)
Leader<leader>expands to keys.leader
Sequencesgg, <leader>fn, <C-w>h, zRconcatenation

Equivalences applied at parse time: <C-I> = <C-i>; <S-a> = A; <Return> = <CR>; <M-x> = <A-x>. Without keyboard enhancement, also <C-i> = <Tab>, <C-m> = <CR>, <C-[> = <Esc>, <C-h> = <BS>.

Display (hints, which-key, help, statusline): Ctrl-d, Alt-x, Shift-Tab, Enter, Esc, Space; plain characters are joined (gg, yp), named keys are separated by spaces (Space f n, Ctrl-w h).

Bindings by context

global

KeysAction
qapp.quit
<Esc> <C-c>app.cancel
?app.help
:cmdline.open
<C-p>quick_open
<C-l>app.redraw
h <C-w>h <Left>focus.left
l <C-w>l <Right>focus.right
<Tab> / <S-Tab>focus.next / focus.prev
gt / gTtab.next / tab.prev
<leader>1 <leader>2 <leader>3tab.goto 1/2/3 (Vault, Generator, Health)
/ / n / Nsearch.start / search.next / search.prev
Rvault.sync
<C-o> / <C-i>jump.back / jump.forward
<leader>/quick_open
<leader>nitem.new
<leader>g / <leader>hgenerator.open / health.open
<leader>e / <leader>ivault.export / vault.import
<leader>Svault.sync force
<leader>lvault.lock
<leader>ttheme.pick
<leader>blayout.toggle_sidebar
<leader>dlist.toggle_density
<leader>mapp.messages
<leader>,app.settings
<leader>kapp.keymap
<leader>qapp.quit
<leader>fn / <leader>fr / <leader>fd / <leader>fffolder.new / folder.rename / folder.delete / folder.jump
<leader>sn / <leader>sm / <leader>sc / <leader>st / <leader>srsort by name / modified / created / type, sort.reverse

Which-key group labels: <leader>f “+folders”, <leader>s “+sort”, g “+go”, z “+folds and reveal”, y “+copy”, d “+delete”, <C-w> “+window”.

Movement (shared by sidebar, list, detail, visual, editor, generator, health, settings, keymap_editor, help)

KeysAction
j <Down> / k <Up>nav.down / nav.up
gg / Gnav.top / nav.bottom
<C-d> / <C-u>nav.half_down / nav.half_up
<C-f> <PageDown> / <C-b> <PageUp>nav.page_down / nav.page_up
H / M / Lscreen top / middle / bottom (not in detail/editor)
zz / zt / zbview.center / view.top / view.bottom
KeysAction
<CR>filter.apply
l <Right>fold.expand_or_apply (open a closed folder, else show its items)
h <Left>fold.collapse_or_parent (close an open folder, else go to its parent)
za / zo / zc / zR / zMfold.toggle / fold.open / fold.close / fold.open_all / fold.close_all
a / r / ddfolder.new / folder.rename / folder.delete
u / <C-r>undo / redo

list

KeysAction
<CR> litem.open
yyitem.copy primary
yu / yp / yt / yU / ynitem.copy username/password/totp/uri/notes
aitem.new (type picker)
e iitem.edit
gEitem.edit_json
dditem.trash
Ditem.delete
ritem.restore (Trash filter)
Xtrash.empty (Trash filter)
u / <C-r>undo / redo
*item.favorite
mitem.move
Y / pitem.yank / item.paste_clone
gxitem.open_uri
ghitem.history
gpitem.generate_password
gfitem.goto_folder
Kitem.info
za / zR / zMitem.reveal_toggle / item.reveal_all / item.hide_all
Vvisual.start
xmark.toggle

detail

KeysAction
j / knext / previous field (movement)
yyitem.copy_field
yu / yp / yt / yU / ynas in list
za / zR / zMitem.reveal_toggle / item.reveal_all / item.hide_all
i / ccitem.edit_field / item.change_field
eitem.edit
gxitem.open_uri (the URI under the cursor)
gh / gp / gf / K / * / mas in list
u / <C-r>undo / redo

visual

KeysAction
j k gg G …extend the range
xmark.toggle
ditem.trash (selection)
D / ritem.delete / item.restore (Trash filter)
mitem.move (selection)
*item.favorite (sets all to favorite unless all already are, then removes)
<Esc> Vvisual.exit

editor (NORMAL)

KeysAction
j <Down> <Tab> / k <Up> <S-Tab>editor.next_field / editor.prev_field
gg / Geditor.first_field / editor.last_field
i / a / I / Ainsert / append / insert at start / append at end
cc Seditor.change_field
o / Oeditor.row_add_below / editor.row_add_above
ddeditor.row_delete
<C-a> / <C-x>editor.cycle_next / editor.cycle_prev
<CR>editor.activate
zaitem.reveal_toggle
<C-g>editor.generate
<C-e>editor.external
gEitem.edit_json
u / <C-r>editor.undo / editor.redo
<C-s>editor.save
ZZ / ZQeditor.save_close / editor.discard
qeditor.close
h / leditor.column_left / editor.column_right

insert

KeysAction
<Esc> <C-[> <C-c>editor.normal
<Tab> <CR> / <S-Tab>editor.next_field / editor.prev_field (stay in INSERT)
<C-a> / <C-x>editor.cycle_next / editor.cycle_prev (on option fields)
<C-g>editor.generate
<C-e>editor.external
<C-s>editor.save

Fixed line-editing keys in INSERT (not remappable): <BS>, <Del>, <Left>, <Right>, <Home>, <End>, <C-w> (delete word), <C-u> (delete to start), <C-h> (= <BS>), bracketed paste.

notes

edtui provides Vim NORMAL/INSERT/VISUAL inside the notes field. lazybw binds only: <Tab>/<S-Tab> in NORMAL to leave the field, <C-e> external editor, <C-s> save, and : to open the lazybw command line (so :w, :wq, :q! keep working).

generator

KeysAction
rgenerator.regenerate
yygenerator.copy
<Tab>generator.toggle_mode
l <C-a> + / h <C-x> -generator.increase / generator.decrease
xgenerator.toggle_option
<CR>generator.use (popup) / generator.toggle_option (tab, on a checkbox)

health

KeysAction
<Tab> / <S-Tab>health.next_category / health.prev_category
<CR>health.open_item
e / gpitem.edit / item.generate_password
rhealth.rerun

quick_open

KeysAction
<C-n> <C-j> <Down> / <C-p> <C-k> <Up>quick_open.next / quick_open.prev
<CR>quick_open.accept
<C-y> / <C-u> / <C-t>copy password / username / code
<C-e>quick_open.edit
<Esc> <C-c>app.cancel

cmdline

KeysAction
<CR>cmdline.execute
<Tab> / <S-Tab>complete next / previous
<Up> <C-p> / <Down> <C-n>history previous / next
<Esc> <C-c>app.cancel

picker, confirm, unlock, settings, keymap_editor, help

ContextKeys → action
pickertype to filter; <C-n> <Down> / <C-p> <Up> next/prev; <CR> accept; <Esc> cancel. These come from the keymap, so they can be rebound. Lists that are not keymap contexts (export format, import preview, password history, login choices) also take <C-n> / <C-p> beside the arrows and j / k. Small pickers (item type) also accept single-letter accelerators shown in the list (l login, n note, c card, i identity, s SSH key).
confirmy / <CR> (only when the default is yes) → yes; n / <Esc> → no. Destructive dialogs require typing a word instead.
unlock<CR> submit; <C-o> log out; <C-c> quit. The master password re-prompt shares this context but <C-c> cancels it, like <Esc>. The login, start-up and error screens are not keymap contexts; <C-c> quits from them too.
settingsmovement, also <C-n> / <C-p>; <CR> activate; l <C-a> / h <C-x> next/previous value; r reset to default; q <Esc> close.
keymap_editormovement, also <C-n> / <C-p>; / filter; <CR> c rebind; a add key; dd remove key; r reset action; R reset all; <Tab>/<S-Tab> context; <C-s> save; q close.
helpmovement, also <C-n> / <C-p>; / search; q <Esc> close.

Command line

: opens the command line at the bottom (cmdline row). Completion: commands first, then arguments (themes, folders, item types, settings and their values, export formats, import formats, filesystem paths with ~ expansion). History is kept between sessions. Unknown commands print E492: Not an editor command: <text> (Vim’s message).

CommandAction
:q[uit]app.quit (in editor: editor.close)
:q!editor.discard in editor, otherwise app.quit_force
:qa[ll] / :qa!app.quit / app.quit_force
:w[rite]editor.save (keymap editor: keymap.save)
:wq :xeditor.save_close
:e!editor.reload
:{n}go to item number n in the list
:new [login|note|card|identity|ssh]item.new
:edit / :edit jsonitem.edit / item.edit_json
:delete / :delete!item.trash / item.delete
:restoreitem.restore
:favitem.favorite
:move [folder]item.move
:copy <field>item.copy <field>
:open [n]item.open_uri
:historyitem.history
:gen [length] / :gen phrase [words]generate with these options and copy
:folder new|rename|delete [name]folder.*
:sort name|modified|created|type[!]sort.set (! reverses)
:theme [name]theme.set / theme.pick
:setapp.settings
:set opt=value / :set opt? / :set opt! / :set opt&set / show / toggle boolean / reset
:map [ctx] [keys] [action…] / :unmap ctx keyssession mappings (§6.6)
:keymapapp.keymap
:sync / :sync!vault.sync / vault.sync force
:lock / :logoutvault.lock / vault.logout
:export [json|encrypted|account|csv] [path]vault.export (opens the wizard pre-filled)
:import [format] [path]vault.import (wizard pre-filled)
:healthhealth.open
:trashsidebar filter Trash
:empty-trashtrash.empty
:messagesapp.messages
:help [topic]app.help
:doctorapp.doctor

:set option names are the config keys without the section where unambiguous (:set theme=nord, :set clipboard_timeout=20s, :set animations!); fully qualified names always work (:set ui.animations=false).

Search language

Used by / (inside the current sidebar filter) and by quick open (whole vault, trash excluded unless is:trash).

  • Tokens are separated by spaces; "quoted phrases" keep spaces; - negates a token or qualifier.
  • Free text is fuzzy-matched with nucleo-matcher (smart case, Unicode normalisation) against: name (weight 1.0), username (0.7), URI hosts (0.6), custom field names (0.4), notes (0.3, only when vault.search_notes = true). Item score = best weighted score; ties: favorites first, then items opened in this session (most recent first), then name.
  • Matched characters of the name are highlighted with the match token.
QualifierValues
type:login/l, note/n, card/c, identity/i, ssh/s
folder:case-insensitive prefix of the folder path (folder:work/proj), none
is:fav, trash, reprompt, weak, reused, exposed, old, insecure (the last five use the latest health run; without one they are ignored and the statusline says “Run Health first”)
has:totp, passkey, fields, notes, uri, history, attachments
uri:substring of any URI
user:substring of the username
name:substring of the name

Examples: git -type:note, has:totp folder:work, is:reused uri:google, "home router".