Skip to main content

Vim mode — Command Reference

For what each toggle switches on/off, see Settings. This section covers what each key actually does.

Motion upgrades

Fixes to Vim's own native keys, scoped to Live Preview table cells — outside a table, these are all unchanged from vanilla Vim.

KeysFunction Summary
h l xMoves/deletes by character correctly inside table cells — no multi-byte miscounting, no wrong jumps at line boundaries.
j kCrosses into the next/previous table row, preserving column position (vim's own goal column) throughout, instead of getting stuck at the cell boundary; also stops correctly at the right line within a multi-line (wrapped) cell.
w b e (and W/B/E/ge/gE)Crosses cell/row boundaries — reaching the end of the table exits into the surrounding text, matching vim's own document-wide word-motion behavior instead of getting stuck at the table's edge. CJK-aware (dictionary-based Chinese/Japanese word segmentation), not just script-boundary-based like vanilla vim.
gg GAlways reaches the note's actual first/last line, including exiting a table cell entirely; lands at the Smart-Home-aware content position if that line happens to be a table row. If the note ends with a table, G appends a blank line and lands there instead of landing inside the table (matching tx's own EOF behavior below) — gg has no symmetric "prepend a line" case.
gj gkThe visual-line (display-line) equivalent of j/k above — moves by visual line inside table cells instead of getting stuck, tracking the visual column across wrapped lines.
$Sticky end-of-line goal column when followed by j/k or gj/gk, matching real vim's own behavior, including across table row crossings. D/C share the same underlying motion.
^ IReuses Smart home's own content-start logic instead of vim's plain whitespace-only skip. How much it skips depends on the Behavior Options: Smart home (standard) skips list/checkbox markers, indentation, and blockquote markers; Smart home (advanced) additionally skips headings, footnotes, and callout type markers.
JReuses Smart join's own line-joining logic instead of vim's plain whitespace-only join, still inserting vim's usual single space. Depends on the Behavior Options' Smart join setting: when it's on, strips the next line's Markdown syntax (blockquote/list markers, indentation) instead of just whitespace.

Table structure

New leader-key commands (<leader> is Space by default, \ optional) — not fixes to existing vim keys, but a thin wrapper around Obsidian's own built-in table commands. No-op outside a table cell, except tm. tiJ/tiK are aliases for to/tO — matching tiH/tiL's own "ti + direction" column-insert convention.

RowColumn
Insert<leader>to / <leader>tO
<leader>tiJ / <leader>tiK
(below/above)
<leader>tiH / <leader>tiL
(left/right)
Move<leader>tK / <leader>tJ
(up/down)
<leader>tH / <leader>tL
(left/right)
Delete<leader>tdd<leader>tdc
Duplicate<leader>tyyp<leader>tyc
Align<leader>tal / <leader>tac / <leader>tar
(left/center/right)

<leader>tm — insert a table; the only one here that also works outside an existing table.

Table navigation

New leader-key commands — pure cursor movement, original logic (not a wrapper around anything native). No-op outside a table cell.

KeysFunction Summary
<leader>tj / <leader>tkJump to the cell below / above (same column), landing at its own content start — distinct from vim's native j/k, which preserve column position instead of jumping to content start.
<leader>th / <leader>tlJump to the cell to the left / right, landing at its own content start — no selection is created. Distinct from Obsidian's own built-in Tab/Shift-Tab cell navigation, which wraps to the next/previous row at a row's own left/right edge (and inserts a brand new row once it runs out of table) and selects the destination cell's entire content — th/tl always stay within the current row, no-op at its own left/right edge instead.
<leader>tx / <leader>tXExit the current table below / above — distinct from gg/G, which jump to the whole document's edge, not just past this table.