Markdown text objects

Operate on Markdown structures with standard Vim operators (d, c, y, v).

KeybindingDescription
i* / a*Inside/around bold (**...**) or italic (*...*)
i_ / a_Inside/around italic (_..._)
i` / a`Inside/around inline code
i$ / a$Inside/around math ($...$ or $$...$$), with smart disambiguation
i~ / a~Inside/around strikethrough (~~...~~)
i= / a=Inside/around highlight (==...==)
il / alInside/around links ([[wikilink]] or [text](url))
iC / aCInside/around fenced code blocks
iB / aBInside/around blockquotes (>)
io / aoInside/around callouts (> [!type])
it / atInside/around HTML/XML tags
i| / a|Inside/around table cell (between | pipes)

Structural navigation

Jump between document structures. Works with counts (e.g., 3]h jumps 3 headings) and operators (e.g., d]h deletes to the next heading).

KeybindingDescription
]h / [hNext/previous heading (any level)
]1]6 / [1[6Next/previous heading of specific level
]l / [lNext/previous list item (same indent level)
]n / [nNext/previous link
]b / [bNext/previous open buffer (tab)

Table navigation

Navigate Markdown table cells without leaving Vim mode.

KeybindingDescription
]| or ]cMove to the next table cell
[| or [cMove to the previous table cell
]rMove to same column in next row
[rMove to same column in previous row

Table text objects

Operate on table cells with standard Vim operators.

KeybindingDescription
i|Inside table cell (content between pipes)
a|Around table cell (content plus trailing pipe)

Table manipulation

Manage table structure using the <leader>t prefix.

KeybindingDescription
<leader>tmInsert table
<leader>toAdd row below
<leader>tOAdd row above
<leader>tJMove row down
<leader>tKMove row up
<leader>tddDelete row
<leader>tiLAdd column to the right
<leader>tiHAdd column to the left
<leader>tLMove column right
<leader>tHMove column left
<leader>tdcDelete column
<leader>trRealign table columns

Hard-wrap operators

Reformat paragraphs with Markdown-aware line wrapping.

KeybindingDescription
gqq / gwqReformat current line at textwidth (default 80)
gqj / gwjReformat current and next line
gqip / gwipReformat paragraph
Visual gq / gwReformat selected lines

EasyMotion find motions

Jump to specific characters forward, backward, or in both directions.

KeybindingDescription
<leader><leader>f{char}Find {char} forward
<leader><leader>F{char}Find {char} backward
<leader><leader>s{char}Find {char} in both directions
<leader><leader>t{char}Till before {char} forward
<leader><leader>T{char}Till after {char} backward

EasyMotion word motions

Jump to word starts or ends across the visible editor.

KeybindingDescription
<leader><leader>wWord start forward
<leader><leader>bWord start backward
<leader><leader>eEnd of word forward
<leader><leader>geEnd of word backward
<leader><leader>WWORD start forward
<leader><leader>BWORD start backward
<leader><leader>EEnd of WORD forward
<leader><leader>gEEnd of WORD backward

EasyMotion line motions

Jump directly to lines above or below the cursor.

KeybindingDescription
<leader><leader>jLine down
<leader><leader>kLine up

EasyMotion search motions

Jump to search matches forward or backward.

KeybindingDescription
<leader><leader>nNext search match forward
<leader><leader>NNext search match backward

Surround

Add, change, or delete surrounding delimiters like brackets, quotes, and tags.

KeybindingDescription
ds{target}Delete surrounding (ds" on "hello"hello)
dstDelete surrounding tag
cs{target}{replacement}Change surrounding (cs"''hello')
cst{replacement}Change surrounding tag
ys{motion}{replacement}Add surround (ysiw) on hello(hello))
ys{motion}<tag>Surround with HTML tag (ysiw<em><em>hello</em>)
ysiwf + name + EnterSurround with function call (print(hello))
ysiwF + name + EnterSurround with spaced function call (print( hello ))
yss{replacement}Surround entire line (yss""line content")
cS / yS / ySSNewline surround variants (delimiters on separate lines)
S{replacement}Surround visual selection (visual mode)
S<tag>Surround selection with tag (visual mode)
gSNewline surround selection (visual mode)
2ds), 2cs)Count: delete/change 2nd-level surrounding bracket
2ysiw*Count: repeat delimiter (**hello** for Markdown bold)
2ds*Count: delete repeated delimiter (unbold **hello**)
<C-G>s{char}Insert mode: type inside delimiters, close on Esc

Workspace navigation

Navigate Obsidian panes, tabs, and history following Neovim conventions.

KeybindingDescriptionGlobal
<C-w>h/j/k/lFocus pane left/down/up/rightYes
<C-w>vSplit verticalYes
<C-w>sSplit horizontalYes
<C-w>c / <C-w>qClose current tabYes
<C-w>oClose all other tabsYes
gt / gTNext/previous tabYes
NgtGo to Nth tab (e.g., 3gt goes to tab 3)Yes
g<C-t>Go to tab by number (e.g., 3g<C-t> goes to tab 3)
H / LPrevious/next tab (non-editor views only)Yes
Ctrl-o / Ctrl-iNavigate back/forward in history (non-editor views)Yes
gdGo to definition — open the link under the cursor
gDOpen link under cursor in a new tab
<C-w>gdOpen link under cursor in a horizontal split
<C-w>gDOpen link under cursor in a vertical split
gxOpen URL under cursor in browser
gfOpen file switcher (quick open)
grnRename current note
grrShow backlinks to current note
graShow context-aware actions for cursor position
gOOpen document outline (searchable heading list)
g<C-g>Show document statistics (words, lines, characters)
gp / gPPaste and move cursor past pasted text
gaShow character info under cursor (codepoint, hex)
g; / g,Jump to older/newer change position
zaToggle fold at cursor
zc / zoFold / unfold at cursor
zO / zC / zARecursive fold open/close/toggle
zM / zRFold all / unfold all

Select mode

KeybindingDescription
ghEnter select mode (charwise)
gHEnter select mode (linewise)
g<C-h>Enter select mode (blockwise)
<C-g>Toggle between visual and select mode (in visual/select)
gVPrevent select mode reselection after mapping

Virtual replace mode

KeybindingDescription
gREnter virtual replace mode (replace by screen column)

Non-editor view bindings

Navigate and interact with non-editor views like PDFs, graphs, and canvases.

KeybindingDescription
fShow hint labels, activate target (click/focus/navigate)
FShow hint labels, open target in new pane
yfShow hint labels, yank target URL or text to clipboard
dfShow hint labels, close target tab or pane
NfActivate N targets sequentially (e.g., 3f activates 3)
j / kScroll down/up one line
Nj / NkScroll N lines (e.g., 5j scrolls 5 lines down)
ggScroll to top
GScroll to bottom
Ctrl-d / Ctrl-uScroll half page down/up
Ctrl-f / Ctrl-bScroll full page down/up

All non-editor bindings can be customized via gmap, gnoremap, and gunmap in your .obsidian.vimrc. Use :gmap to list all active global bindings. See vimrc > Global key mappings for syntax.

Ex commands

Execute commands via the : command line, grouped by function.

File and buffer

CommandDescription
:w / :writeSave current file
:update / :upSave current file (alias for :w)
:q / :quitClose current tab
:wqSave and close
:x / :xitWrite if modified and close
:xa / :xallWrite if modified all and close all
:e {file} / :edit {file}Open file by name in vault
:e! / :edit!Revert current file to saved version
:enewCreate new untitled note
:saveas {file}Save current buffer as new file
:find {file} / :finFind and open file by partial name match
:read {file} / :rInsert file contents at cursor position
:bn / :bpNext / previous tab
:b {name} / :buffer {name}Switch to tab matching name
:bf / :bfirstGo to first tab
:bl / :blastGo to last tab
:bd / :bcClose current tab
:bw / :bwipeoutClose current tab
:onlyClose all other tabs
:qaClose all tabs
:wa / :wallSave all open files

Window and tab

CommandDescription
:sp / :splitHorizontal split
:vs / :vsplitVertical split
:newHorizontal split with new note
:vnewVertical split with new note
:tabnew / :tabeditOpen new tab (optionally with file)
:tabclose / :tabcClose current tab
:tabonly / :taboClose all other tabs
:tabfirst / :tabrewindGo to first tab
:tablast / :tablGo to last tab

Table

CommandDescription
:tableinsertInsert table
:tablerowafter / :tablerowbeforeAdd row below / above
:tablerowup / :tablerowdownMove row up / down
:tablerowdeleteDelete row
:tablecolafter / :tablecolbeforeAdd column right / left
:tablecolleft / :tablecolrightMove column left / right
:tablecoldeleteDelete column
:tablealignleft / :tablealigncenter / :tablealignrightSet column alignment
:tablerealignRealign table columns to uniform widths
CommandDescription
:explorerReveal active file in file explorer
:buffers / :lsShow all open buffers in a modal
:backlinksShow backlinks to the current note in a modal
:grep {pattern}Search vault for text, show results in a modal
:back / :forwardNavigate back / forward in history
:marksShow marks and their positions in a modal
:changesShow change list in modal

Utility

CommandDescription
:ob {command-id}Execute any Obsidian command by ID
:obList all available command IDs
:sidebar left / :sidebar rightToggle left/right sidebar
:reg / :registersShow register contents in a modal
:delmarks {marks}Delete specified marks
:version / :veShow plugin version
:gmapList all active global bindings

Quality of life

Enhanced Vim behavior and Obsidian-specific improvements.

KeybindingDescription
o / OSmart list continuation (bullets, numbers, checkboxes)
YYank to end of line (y$)
QReplay last recorded macro (@@)