Operate on Markdown structures with standard Vim operators (d, c, y, v).
| Keybinding | Description |
| ------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
| 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 / al | Inside/around links ([[wikilink]] or [text](url)) |
| iC / aC | Inside/around fenced code blocks |
| iB / aB | Inside/around blockquotes (>) |
| io / ao | Inside/around callouts (> [!type]) |
| it / at | Inside/around HTML/XML tags |
| ir / ar | Inside/around table row (raw markdown only) |
| i\| / a\| | Inside/around table cell (between \| pipes) |
| iS / aS | Subword | camelCase/snake_case segment. Around includes trailing separator |
| in / an | Number | Numeric literal (sign + decimal). Around includes surrounding space |
| iq / aq | Any quote | Nearest "/'/` pair on same line |
| iD / aD | Double brackets | Wikilink [[...]] content. Handles nesting |
| gL | URL | Forward-seeking URL selection (https://...) |
| i, / a, | Argument | Comma-separated argument with nesting support |
| ii / ai | Indentation | Lines with same-or-greater indentation level; around includes parent + trailing blanks |
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).
Keybinding
Description
]h / [h
Next/previous heading (any level)
]1–]6 / [1–[6
Next/previous heading of specific level
]l / [l
Next/previous list item (same indent level)
]n / [n
Next/previous link
]b / [b
Next/previous open buffer (tab)
Subword motions
Key
Action
Notes
w
Next subword start
Requires enableSubwordMotions setting. Stops at camelCase/snake_case/kebab-case boundaries
b
Previous subword start
Same
e
End of current/next subword
Same
ge
End of previous subword
Same
Table navigation
Navigate Markdown table cells without leaving Vim mode.
Keybinding
Description
]| or ]c
Move to the next table cell
[| or [c
Move to the previous table cell
]r
Move to same column in next row
[r
Move to same column in previous row
Table text objects
Operate on table cells with standard Vim operators.
Keybinding
Description
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.
Keybinding
Description
<leader>tm
Insert table
<leader>to
Add row below
<leader>tO
Add row above
<leader>tJ
Move row down
<leader>tK
Move row up
<leader>tdd
Delete row
<leader>tiL
Add column to the right
<leader>tiH
Add column to the left
<leader>tL
Move column right
<leader>tH
Move column left
<leader>tdc
Delete column
<leader>tr
Realign table columns
Embedded table navigation
Available when the table widget is set to “Embedded” and the cursor enters a table. These keybindings are active in the table navigation layer (before entering a cell).
Keybinding
Description
h / l
Move cell highlight left / right
j / k
Move cell highlight down / up
i / a / c / s / Enter
Enter cell editing
Escape
Exit table
o / O
Add row below / above
dd
Delete row
dc
Delete column
J / K
Move row down / up
H / L
Move column left / right
I / A
Add column left / right
=
Realign table
Tab / Shift-Tab
Next / previous cell (in cell editing)
Picker shortcuts
Open picker sources with the <leader>f prefix.
Keybinding
Description
<leader>ff
Find files
<leader>fg
Live grep (vault search)
<leader>fb
Switch buffers
<leader>fh
Search headings
<leader>fo
Document outline
<leader>fk
Backlinks
<leader>ft
Search tags
<leader>fr
Recent files
<leader>fm
Jump to mark
<leader>fR
Registers
<leader>fp
Resume last picker
Harpoon
Pin files to numbered slots for instant switching. See harpoon for details.
Keybinding
Description
<leader>ha
Pin current file
<leader>hr
Remove current file
<leader>ht
Toggle pin
<leader>hp
Open harpoon picker
<leader>1–<leader>9
Jump to slot 1–9
<leader>hn
Next pin
<leader>hN
Previous pin
Keyboard shortcuts inside picker
Key
Action
<C-n> / <C-p>
Navigate down/up
<C-j> / <C-k>
Navigate down/up
<Up> / <Down>
Navigate down/up
<Enter>
Select item
<Escape> / <C-c>
Close picker
<C-x>
Open in horizontal split
<C-v>
Open in vertical split
<C-t>
Open in new tab
<C-d> / <C-u>
Scroll preview down/up
Hard-wrap operators
Reformat paragraphs with Markdown-aware line wrapping.
Keybinding
Description
gqq / gwq
Reformat current line at textwidth (default 80)
gqj / gwj
Reformat current and next line
gqip / gwip
Reformat paragraph
Visual gq / gw
Reformat selected lines
Undo tree navigation
Key
Action
g-
Navigate to chronologically older undo state
g+
Navigate to chronologically newer undo state
:earlier N
Go back N changes
:later N
Go forward N changes
:earlier Ns/Nm/Nh/Nd
Go back by time
:earlier Nf
Go to Nth previous save point
:undolist
Show undo tree modal
:UndoTreeToggle
Toggle undo tree sidebar
:UndoTreeShow
Open undo tree sidebar
:UndoTreeHide
Close undo tree sidebar
Replace-with-register operator
Replace text covered by a motion with the contents of a register, discarding
the replaced text (not written back to any register). The register supplying the
replacement is preserved, so you can paste the same text repeatedly without
re-yanking.
Blockwise visual selections (<C-V>) are supported.
Keybinding
Description
gr{motion}
Replace {motion} text with unnamed register (")
grr
Replace current line with unnamed register (linewise)
"a gr{motion}
Replace {motion} text with register a
Visual gr
Replace selection with unnamed register
Example usage:
yiw " yank inner wordgriw " replace next inner word (register preserved — repeat!)grr " replace current linegrap " replace a paragraph"agr$ " replace to end of line using register a
Info
gr{motion} is not a Neovim built-in — it originates from the vim-ReplaceWithRegister plugin. In Neovim 0.10+, the gr prefix is used
for LSP actions (grn rename, grr references, gra code action). Since
Obsidian has no LSP, this plugin repurposes gr for replace-with-register
and exposes the former grn/grr/gra workspace actions as leader
bindings (<leader>rn, <leader>rb, <leader>ra) and ex commands
(:renamenote, :showbacklinks, :contextactions).
Flash motions
Enhanced character search — when multiple matches are visible, labels appear for direct jumping.
Keybinding
Description
f{char}
Find {char} forward — autojump on single match, labels on 2+
F{char}
Find {char} backward
t{char}
Till before {char} forward
T{char}
Till after {char} backward
Flash works with operators (df, cf, yf) and visual mode (vf). Repeat with ; and ,.
Flash jump mode
Bidirectional character search (disabled by default, enable with set flashjump).
Keybinding
Description
s{char}
Search {char} bidirectionally — labels on all matches
The trigger key is configurable via set flashjumpkey=<key>.
Flash search labels
After committing a / or ? search, labels appear on all visible matches for direct jumping.
EasyMotion find motions
Jump to specific characters forward, backward, or in both directions.
Keybinding
Description
<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.
Keybinding
Description
<leader><leader>w
Word start forward
<leader><leader>b
Word start backward
<leader><leader>e
End of word forward
<leader><leader>ge
End of word backward
<leader><leader>W
WORD start forward
<leader><leader>B
WORD start backward
<leader><leader>E
End of WORD forward
<leader><leader>gE
End of WORD backward
EasyMotion line motions
Jump directly to lines above or below the cursor.
Keybinding
Description
<leader><leader>j
Line down
<leader><leader>k
Line up
EasyMotion search motions
Jump to search matches forward or backward.
Keybinding
Description
<leader><leader>n
Next search match forward
<leader><leader>N
Next search match backward
Surround
Add, change, or delete surrounding delimiters like brackets, quotes, and tags.
Keybinding
Description
ds{target}
Delete surrounding (ds" on "hello" → hello)
dst
Delete 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 + Enter
Surround with function call (print(hello))
ysiwF + name + Enter
Surround with spaced function call (print( hello ))
dsf
Delete surrounding function call (print(hello) → hello)
csf + name + Enter
Change surrounding function name (foo(bar) → baz(bar))
yss{replacement}
Surround entire line (yss" → "line content")
cS / yS / ySS
Newline surround variants (delimiters on separate lines)
Insert mode: inserts both delimiters, type inside them
Workspace navigation
Navigate Obsidian panes, tabs, and history following Neovim conventions.
Keybinding
Description
Global
<C-w>h/j/k/l
Focus pane left/down/up/right
Yes
<C-w>v
Split vertical
Yes
<C-w>s
Split horizontal
Yes
<C-w>c / <C-w>q
Close current tab
Yes
<C-w>o
Close all other tabs
Yes
gt / gT
Next/previous tab
Yes
Ngt
Go 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 / L
Previous/next tab (non-editor views only)
Yes
<C-w>w
Cycle to next pane
Yes
<C-w>W
Cycle to previous pane
Yes
<C-w>p
Focus previously accessed pane
Yes
Ctrl-o / Ctrl-i
Jump backward / forward through jump history (supports count)
Yes
<C-^> / <C-6>
Switch to alternate (previously edited) file
Yes
<C-]>
Follow link under cursor (alias for gd)
—
<C-t>
Pop from link follow (jump list backward)
—
gd
Go to definition — open the link under the cursor
—
gD
Open link under cursor in a new tab
—
<C-w>gd
Open link under cursor in a horizontal split
—
<C-w>gD
Open link under cursor in a vertical split
—
gx
Open URL under cursor in browser
—
gf
Open file switcher (quick open)
—
gO
Open document outline (searchable heading list)
—
g<C-g>
Show document statistics (words, lines, characters)
—
gp / gP
Paste and move cursor past pasted text
—
ga
Show character info under cursor (codepoint, hex)
—
gm
Go to middle of screen line
—
go
Go to character offset (byte N in buffer, with count)
—
g8
Show UTF-8 byte sequence for character under cursor
—
gF
Go to file with optional line number (file.md:42)
—
<C-g>
Show file info (name, lines, position, percentage)
—
<leader>rn
Rename current note
—
<leader>rb
Show backlinks to current note
—
<leader>ra
Show context actions for current note
—
Fold commands
Keybinding
Description
zo
Open fold at cursor
zO
Open fold at cursor recursively
zc
Close fold at cursor
zC
Close fold at cursor recursively
za
Toggle fold at cursor
zA
Toggle fold at cursor recursively
zd
Delete fold at cursor
zD
Delete fold at cursor recursively
zf{motion}
Create fold for {motion} text
zF
Create fold for [count] lines
zE
Eliminate all folds
zm
Fold more (increment fold level)
zM
Close all folds
zr
Fold less (decrement fold level)
zR
Open all folds
zn
Fold none — disable folding, open all folds
zN
Fold normal — re-enable folding
zi
Toggle fold enable
zv
Open enough folds to view cursor line
zx
Reapply fold level and reveal cursor
zX
Reapply fold level
zj
Move to start of next fold
zk
Move to end of previous fold
[z
Move to start of current fold
]z
Move to end of current fold
Horizontal scroll
Keybinding
Description
zs
Scroll text so cursor column is at the left edge
ze
Scroll text so cursor column is at the right edge
zH
Scroll half a screen width to the left
zL
Scroll half a screen width to the right
Select mode
Keybinding
Description
gh
Enter select mode (charwise)
gH
Enter select mode (linewise)
g<C-h>
Enter select mode (blockwise)
<C-g>
Toggle between visual and select mode (in visual/select)
gV
Prevent select mode reselection after mapping
Virtual replace mode
Keybinding
Description
gR
Enter virtual replace mode (replace by screen column)
Non-editor view bindings
Navigate and interact with non-editor views like PDFs, graphs, and canvases.
Keybinding
Description
f
Show hint labels, activate target (click/focus/navigate)
F
Show hint labels, open target in new pane
yf
Show hint labels, yank target URL or text to clipboard
df
Show hint labels, close target tab or pane
gf
Show hint labels, open context menu on target
Nf
Activate N targets sequentially (e.g., 3f activates 3)
j / k
Scroll down/up one line
Nj / Nk
Scroll N lines (e.g., 5j scrolls 5 lines down)
gg
Scroll to top
G
Scroll to bottom
Ctrl-d / Ctrl-u
Scroll half page down/up
Ctrl-f / Ctrl-b
Scroll 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.
Remove current file (or :HarpoonRemove N for slot N)
:Harpoon
Open harpoon picker
:HarpoonSelect N
:HarpoonS
Jump to pin slot N
:HarpoonNext
:HarpoonN
Next pin
:HarpoonPrev
:HarpoonP
Previous pin
Input method
Command
Short
Description
:IMToggle
:IMT
Toggle input method switching on/off
:IMStatus
:IMS
Show current input method identifier
Utility
Command
Description
:ob {command-id}
Execute any Obsidian command by ID
:ob
List all available command IDs
:commands
Search and execute Obsidian commands
:sidebar left / :sidebar right
Toggle left/right sidebar
:reg / :registers
Browse vim registers (paste on select)
:delmarks {marks}
Delete specified marks
:version / :ve
Show plugin version
:violations / :viol
Show runtime invariant violations
:violations! / :viol!
Clear invariant violation log
:gmap
List all active global bindings
Snippets
Snippet keybindings are active during snippet expansion (after a snippet has been triggered).
Keybinding
Description
Tab
Move to next tabstop / expand snippet at prefix
Shift+Tab
Move to previous tabstop
Escape
Exit snippet mode
Ctrl+N
Cycle to next choice (on choice fields)
Ctrl+P
Cycle to previous choice (on choice fields)
Oil explorer
Oil keybindings are only active when an oil buffer is focused. All keybindings are user-remappable via Lua or vimrc — see oil-explorer > Remapping keybindings for details.
Keybinding
Ex command
Description
<CR>
:oilopen
Open file under cursor / navigate into directory
<C-t>
:oilopentab
Open file under cursor in new tab
<C-s>
:oilopensv
Open file under cursor in vertical split
<C-h>
:oilopensh
Open file under cursor in horizontal split
-
:oilparent
Navigate to parent directory
~
:oilroot
Navigate to vault root
q
:oilclose
Close oil buffer
<C-c>
:oilclose
Close oil buffer
<C-l>
:oilrefresh
Refresh directory listing
g.
:oiltogglehidden
Toggle hidden files (dotfiles)
gs
:oilcyclesort
Cycle sort order (name → modified time → size)
y.
:oilyankpath
Yank vault-relative file path to clipboard
gf
:oilreveal
Reveal file under cursor in Obsidian file explorer
gx
:oilopenexternal
Open file under cursor in default system app
dd
Stage file deletion (commit with :w)
o
Stage file creation — type filename, commit with :w
cw
Stage file rename — edit filename, commit with :w
:w
Commit all staged changes (create/rename/delete)
:Oil
Open oil explorer (no arg: current dir, .//: vault root, path: specific dir)
Quality of life
Enhanced Vim behavior and Obsidian-specific improvements.
Keybinding
Description
o / O
Smart list continuation (bullets, numbers, checkboxes)
Y
Yank to end of line (y$)
Q
Replay last recorded macro (@@)
@:
Repeat last ex command
&
Repeat last :s substitution on current line
ZZ
Write current file and close tab (:wq)
ZQ
Close tab without saving (:q)
g;
Older change
g,
Newer change
g-
Older undo state
g+
Newer undo state
<C-p>
Cycle paste previous register (or k if not cycling)
<C-n>
Cycle paste next register (or j if not cycling)
Insert mode
Keybinding
Description
<C-a>
Re-insert previously inserted text
<C-e>
Copy character from line below (same column)
<C-y>
Copy character from line above (same column)
<C-G>s
Insert-mode surround (inserts both delimiters, type inside)
All keybindings above are user-remappable. See remapping for instructions and examples covering editor, oil explorer, picker, and global workspace navigation contexts.