A polished, Neovim-native experience inside Obsidian. Vim Motions adds what’s missing from Obsidian’s built-in Vim mode: Markdown-aware text objects, structural navigation, hard-wrap formatting, workspace keyboard control, EasyMotion, a telescope-style fuzzy picker, Lua configuration with vim.keymap.set / vim.opt / vim.fn / vim.api / vim.ob / vim.tbl_* / autocommands / timers / highlight groups / global keymaps / which-key labels, and a built-in .obsidian.vimrc loader.
Feature highlights
- Markdown text objects — operate on bold, italic, code, math, links, blockquotes, code blocks, tables, and more with standard Vim operators
- Structural navigation — jump between headings, lists, links, and buffers with
]h,]l,]n,]b - Lua configuration —
.obsidian.init.luawithvim.keymap.set,vim.opt(includingguicursor),vim.fn(includingundotree()),vim.api(buffer APIs,nvim_set_hl),vim.ob(68 Obsidian-specific functions: metadata, filesystem, UI, cursor, surround, leader),vim.tbl_*,vim.json,vim.inspect,vim.regex(ECMAScript RegExp),vim.schedule/vim.uvtimers, 19 autocommand events, buffer-local keymaps,vim.obsidian.keymap(global keymaps),vim.obsidian.whichkey(which-key labels), async file reading (vim.ob.fs.read), multi-file configs viarequire(), and fuzzy picker API - Built-in vimrc —
.obsidian.vimrcloader with 75+ configurable settings - Flash motions — enhanced
f/F/t/Twith jump labels, incrementalssearch, post-commit//?labels, clever-f - EasyMotion / Hop — jump to any visible position with two keystrokes
- Workspace keyboard control — navigate panes, tabs, and sidebar without a mouse
- Surround — add, change, or delete surrounding delimiters (nvim-surround parity, custom pairs)
- Hard-wrap formatting — Markdown-aware
gq/gwoperators - 100+ ex commands —
:sp,:vs,:e,:grep,:ob, fuzzy picker commands, and more - Vimium-style hints — navigate the entire Obsidian UI with keyboard hints
- Undo tree — branching undo history visualization with
g-/g+chronological navigation,:earlier/:latertime travel, sidebar tree view, and optional persistence
Get started
New to Vim Motions?
Start with installation to install the plugin, then follow recommended-setup to configure Obsidian for the best experience.
Quick links
- Keybinding cheat sheet — complete reference for all motions, text objects, operators, and commands
- Settings reference — all 100 configurable items with defaults and vimrc equivalents
- Known limitations — architectural constraints and workarounds
What’s new in 0.120.0
- ~50 vim/neovim built-in gaps closed — systematic coverage effort adding
@:,&,ZZ/ZQ, insert<C-a>/<C-e>/<C-y>,<C-^>,<C-]>,<C-t>,<C-w>w/W/p,gm,go,g8,gF,<C-g>,zs/ze/zH/zL,:m/:t/:normal, and 21 no-op crash guards - Table cell macOS cursor bounce-back final fix — replaced
MessageChannelwithrequestAnimationFramein cross-cell motions, guaranteeing Obsidian’s table widget handlers finish before the plugin changes cell focus. (#136) - Table-nav viewport scrolling — tables taller than the viewport now scroll to keep the highlighted cell visible, using a CM6
scrollHandlerfacet for widget-aware scrolling. (#136) - Pane cycling and alternate file —
<C-w>w/W/pcycle panes,<C-^>switches to the alternate file,<C-]>/<C-t>follow and pop links - New ex commands —
:m/:moveline moves,:t/:copyline copies, and:normal/:normal!key dispatch from the command line - 71 new e2e tests across 6 new spec files covering all new commands, table-nav scrolling, and no-op crash guards
See the full changelog for details.