All features can be toggled independently in Settings → Vim Motions. Changes take effect immediately without restarting. On Obsidian 1.13.0+, all settings are indexed by Obsidian’s global settings search.

Vim features

| Name | Type | Default | Range/Options | Lua | Vimrc | Description |
| -------------------------------- | -------- | -------- | ------------------------- | ---------------------------- | ---------------------- | ---------------------------------------------------------------------------------------- | ----- | --------------- |
| Text objects | toggle | true | — | vim.opt.textobjects | set textobjects | Enable Markdown-aware text objects (i*, a*, il, etc.). |
| Structural navigation | toggle | true | — | vim.opt.navigation | set navigation | Enable heading, list, and link navigation motions (]h, [h, ]l, etc.). |
| Hard-wrap operator (gq) | toggle | true | — | vim.opt.hardwrap | set hardwrap | Enable gq operator to reformat paragraphs with Markdown-aware line wrapping. |
| Smart list continuation on o/O | toggle | true | — | vim.opt.listcontinuation | set listcontinuation | Automatically continue list markers (bullets, numbers, checkboxes) when pressing o or O. |
| Table navigation | toggle | true | — | vim.opt.tablenav | set tablenav | Enable table cell navigation motions (] | , [ | , ]c, [c). |
| Table widget in live preview | dropdown | cursor | always, cursor, off | vim.opt.tablewidget | set tablewidget | Controls how tables display in Live Preview. |
| Formatting marks in Live Preview | dropdown | cursor | cursor, off | vim.opt.formattingmarkmode | — | Corrects cursor positioning near formatting marks in Live Preview. |
| Workspace navigation | toggle | true | — | vim.opt.workspacenav | set workspacenav | Enable pane/tab/sidebar control (<C-w>h/j/k/l, gt, gT, etc.). |

Warning

Workspace navigation: <C-w> may conflict with Obsidian’s “Close current tab” hotkey. Rebind it in Settings → Hotkeys.

Vim engine

NameTypeDefaultRange/OptionsLuaVimrcDescription
Clipboarddropdown(off)unnamed, unnamedplus, (off)vim.opt.clipboardset clipboardSync yank/delete/paste with the system clipboard.
Tabstopslider41–8vim.opt.tabstopset tabstopTab display width.
Shiftwidthslider41–8vim.opt.shiftwidthset shiftwidthIndent width.
Expand tabtoggletruevim.opt.expandtabset expandtabUse spaces instead of tabs.
Insert mode escapetext(off)vim.opt.insertmodeescapeset insertmodeescapeTwo-key sequence to exit insert mode (e.g., jk).
Insert mode escape timeoutnumber1000100–5000vim.opt.insertmodeescapetimeoutset insertmodeescapetimeoutTimeout in milliseconds for insert mode escape sequence.
Textwidthnumber800–200vim.opt.textwidthset textwidthLine wrap width for gq/gw (0 to disable).

Jump navigation

NameTypeDefaultRange/OptionsLuaVimrcDescription
EasyMotiontoggletruevim.opt.easymotionset easymotionEnable easymotion/hop navigation (<leader><leader>w, etc.).
EasyMotion dimmingtoggletruevim.opt.easymotiondimmingset easymotiondimmingDim non-target text when EasyMotion is active.
EasyMotion label characterstextasdghklqwertyuiopzxcvbnmfjvim.opt.easymotionlabelsset easymotionlabelsCharacters used for EasyMotion labels.
Hint modetoggletruevim.opt.hintmodeset hintmodeEnable vimium-style link hints to click UI elements.
Hint mode label characterstextasdfghjklvim.opt.hintlabelsset hintlabelsCharacters used for hint labels.
Hint mode global hotkeyhotkey(off)Key combination to trigger hint mode from anywhere.
Label font sizeslider1410–20vim.opt.labelfontsizeset labelfontsizeFont size for EasyMotion and hint mode labels.

Status bar

NameTypeDefaultRange/OptionsLuaVimrcDescription
Vim mode status bartoggletruevim.opt.statusbarset statusbarShow current Vim mode in the status bar.
Vim chord displaytoggletruevim.opt.chorddisplayset chorddisplayShow pending keystrokes in the status bar.
Powerline-style status bartogglefalsevim.opt.powerlineset powerlineColor the Vim mode indicator with per-mode background colors.

Vim mode display prompt

NameTypeDefaultRange/OptionsLuaVimrcDescription
Normal mode prompttextNORMALvim.g.mode_prompt_normallet g:mode_prompt_normalStatus bar text for normal mode.
Insert mode prompttextINSERTvim.g.mode_prompt_insertlet g:mode_prompt_insertStatus bar text for insert mode.
Visual mode prompttextVISUALvim.g.mode_prompt_visuallet g:mode_prompt_visualStatus bar text for visual mode.
V-Line mode prompttextV-LINEvim.g.mode_prompt_visual_linelet g:mode_prompt_visual_lineStatus bar text for visual line mode.
V-Block mode prompttextV-BLOCKvim.g.mode_prompt_visual_blocklet g:mode_prompt_visual_blockStatus bar text for visual block mode.
Replace mode prompttextREPLACEvim.g.mode_prompt_replacelet g:mode_prompt_replaceStatus bar text for replace mode.
Select mode prompttextSELECTvim.g.mode_prompt_selectlet g:mode_prompt_selectStatus bar text for select mode.
Virtual replace mode prompttextV-REPLACEvim.g.mode_prompt_vreplacelet g:mode_prompt_vreplaceStatus bar text for virtual replace mode.
Command mode prompttextCOMMANDvim.g.mode_prompt_commandlet g:mode_prompt_commandStatus bar text for command-line mode.
Search mode prompttextSEARCHvim.g.mode_prompt_searchlet g:mode_prompt_searchStatus bar text for search mode.
Insert-normal mode prompttextNORMALvim.g.mode_prompt_insert_normallet g:mode_prompt_insert_normalStatus bar text when in normal mode via Ctrl-O from insert.

Cursor shapes

Info

Cursor shapes require bundled fork mode. Disable Obsidian’s built-in Vim key bindings to enable these options.

NameTypeDefaultRange/OptionsLuaVimrcDescription
Normal modedropdownblockblock, bar, underline, hollowset guicursorCursor shape for normal mode.
Insert modedropdownbarblock, bar, underline, hollowset guicursorCursor shape for insert mode.
Visual modedropdownblockblock, bar, underline, hollowset guicursorCursor shape for visual mode.
Replace modedropdownunderlineblock, bar, underline, hollowset guicursorCursor shape for replace mode.
Operator-pendingdropdownunderlineblock, bar, underline, hollowset guicursorCursor shape for operator-pending mode.

Vimrc & key bindings

NameTypeDefaultRange/OptionsLuaVimrcDescription
Configuration modedropdownlua-vimrclua-vimrc, lua, vimrc, settingsHow the plugin loads config files. Lua + Vimrc loads both with Lua priority.
Custom vimrc pathtext(empty)Path to a vimrc file in your vault.
Custom init.lua pathtext(empty)Path to an init.lua file in your vault.

Leader key bindings

Map leader key sequences to Obsidian commands. This UI allows you to add new bindings by specifying a key sequence and picking an Obsidian command from a searchable list. Existing bindings can be removed via the trash icon. These are applied in addition to any bindings defined in your vimrc.

Which-key hints

NameTypeDefaultRange/OptionsLuaVimrcDescription
Which-key modedropdownoffoff, leader, allvim.opt.whichkeyset whichkeyShow available key continuations in a popup.
Which-key leader groupingdropdowngroupedgrouped, flatvim.opt.whichkeygroupingset whichkeygroupingHow leader key bindings are displayed.
Which-key popup delaynumber5000–2000vim.opt.whichkeydelayset whichkeydelayDelay in milliseconds before the popup appears. Subsequent keystrokes update the popup instantly.

Which-key group labels

Name groups by their full key prefix. Use the leader character + prefix for leader groups (e.g., \t for table), or a raw prefix for non-leader groups (e.g., cs for surround changes). The UI provides a list of existing labels with the ability to add new ones or delete custom entries. Built-in features register default labels that your entries can override.

Which-key command labels

Describe individual bindings in the which-key popup. The UI shows a list of all active bindings (including those from vimrc) and allows you to provide a custom label for each. Entries set in vimrc appear as read-only rows.

Advanced

NameTypeDefaultRange/OptionsLuaVimrcDescription
Scrolloff linesnumber50–9999vim.opt.scrolloffset scrolloffNumber of lines to keep visible above and below when scrolling.
Multi-line text object scan rangeslider205–200vim.opt.scanlimitset scanlimitMaximum lines to scan in each direction for multi-line text objects.

Tip

Set Scrolloff lines to 9999 to keep the cursor vertically centered.

Settings not available via vimrc

  • Configuration mode (configMode): Cannot be set via vimrc or init.lua because it controls which config files are loaded (circular dependency).
  • Hint mode global hotkey (hintModeHotkey): Requires a specialized recording UI to capture modifier keys and cannot be easily represented as a simple string in a vimrc file.
  • Leader key bindings (leaderBindings): While the plugin provides a UI for this, the same functionality is already achievable via standard nmap <leader>... commands in your vimrc.