Keybindings

June 8, 2026 · View on GitHub

Hollow uses Vim-style chord notation, modal bindings, and a leader key. This page covers the key syntax, the default keymap shipped in conf/init.lua, and how to override anything from your personal config.

For the full action list, see Built-in keymap actions. For the API, see hollow.keymap.

Chord syntax

FormMeaning
jSingle printable key
<C-t>Ctrl + t
<C-S-Tab>Ctrl + Shift + Tab
<A-PageDown>Alt + PageDown
<leader>rThe leader key followed by r
<leader>uuThe leader key followed by u, then u (sequence)

Mods you can chain: C- (Ctrl), S- (Shift), A- (Alt). Legacy ctrl+..., leader+..., and split mods/key APIs are not supported; use the <...> form.

Modes

Every binding belongs to a mode. Hollow ships two:

  • normal — the default; binding applies to the focused pane
  • copy_mode — the modal scrollback navigator; see Copy mode

mode defaults to "normal". Bind to copy mode with { mode = "copy_mode" }.

The leader key

The leader key is a prefix that opens a small mini-language of two-key sequences. The shipped base config sets <C-Space> with a 1200 ms timeout:

hollow.keymap.set_leader("<C-Space>", { timeout_ms = 1200 })

Override from your personal config with a different chord. hollow.keymap.clear_leader() removes the leader entirely.

The default keymap

This is the keymap shipped in conf/init.lua. Override any entry by calling hollow.keymap.set(...) again with the same chord and a new action — last set wins.

Clipboard

ChordAction
<C-S-c>copy_selection
<C-S-v>paste_clipboard
<S-Insert>paste_clipboard

Tabs

ChordAction
<C-t>new_tab
<C-w>close_tab
<C-Tab>next_tab
<C-S-Tab>prev_tab
<C-A-Right>next_tab
<C-A-Left>prev_tab

Workspaces

ChordAction
<C-A-n>new_workspace
<C-A-p>workspace_switcher
<C-A-r>rename_workspace
<C-A-w>close_workspace
<C-A-Right>next_workspace
<C-A-Left>prev_workspace

Panes

ChordAction
<C-\>split_vertical
<C-S-\>split_horizontal
<C-S-w>close_pane
<C-S-m>maximize_pane
<C-S-f>float_pane
<C-A-S-f>tile_pane

Focus

ChordAction
<C-S-Left>focus_pane_left
<C-S-Right>focus_pane_right
<C-S-Up>focus_pane_up
<C-S-Down>focus_pane_down

Move

ChordAction
<C-A-h>move_pane_left
<C-A-l>move_pane_right
<C-A-k>move_pane_up
<C-A-j>move_pane_down

Resize

ChordAction
<C-A-S-Left>resize_pane_left
<C-A-S-Right>resize_pane_right
<C-A-Up>resize_pane_up
<C-A-Down>resize_pane_down

Scrollback

ChordAction
<A-S-PageUp>scrollback_page_up
<A-S-PageDown>scrollback_page_down
<C-S-Home>scrollback_top
<C-S-End>scrollback_bottom
<A-S-Up>prompt_jump_prev
<A-S-Down>prompt_jump_next

Copy mode

ChordAction
<C-S-x>copy_mode
<C-S-X>copy_mode (alias)
<leader>/copy_mode_search

See Copy mode for the modal bindings.

Leader bindings

ChordAction
<leader>rRename current tab
<leader>uuReload config
<leader>pOpen the command palette

Font size

ChordAction
<C-S-minus>Decrease font size by 0.5
<C-S-equal>Increase font size by 0.5
<C-0>Reset font size

These are bound to inline Lua callbacks in conf/init.lua; see Config snippets for the pattern.

Overriding keymaps

local hollow = require("hollow")

-- Replace an action
hollow.keymap.set("<C-t>", function()
  hollow.term.new_tab({ domain = "wsl" })
end, { desc = "new tab in wsl" })

-- Remove a binding
hollow.keymap.del("<C-S-c>")

-- Bind a leader sequence
hollow.keymap.set("<leader>e", "split_vertical", { desc = "split vertical" })

-- Deleting a keymap
hollow.keymap.del("<leader>uu")

Inline callbacks and string action names are equivalent. desc is used by the key-legend widget and by the workspace switcher.

Adding copy-mode bindings

hollow.keymap.set("h", "copy_mode_move_left",  { mode = "copy_mode" })
hollow.keymap.set("j", "copy_mode_move_down",  { mode = "copy_mode" })
hollow.keymap.set("k", "copy_mode_move_up",    { mode = "copy_mode" })
hollow.keymap.set("l", "copy_mode_move_right", { mode = "copy_mode" })
hollow.keymap.set("gg", "copy_mode_top",       { mode = "copy_mode" })
hollow.keymap.set("G",  "copy_mode_bottom",    { mode = "copy_mode" })
hollow.keymap.set("v",  "copy_mode_begin_selection",      { mode = "copy_mode" })
hollow.keymap.set("<C-v>", "copy_mode_begin_block_selection", { mode = "copy_mode" })
hollow.keymap.set("y",  "copy_mode_copy_selection", { mode = "copy_mode" })
hollow.keymap.set("/", "copy_mode_search",         { mode = "copy_mode" })
hollow.keymap.set("n", "copy_mode_search_next",    { mode = "copy_mode" })
hollow.keymap.set("N", "copy_mode_search_prev",    { mode = "copy_mode" })
hollow.keymap.set("q", "copy_mode_exit",           { mode = "copy_mode" })
hollow.keymap.set("<Esc>", "copy_mode_exit",       { mode = "copy_mode" })

Reference