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.lua with vim.keymap.set, vim.opt (including guicursor), vim.fn (including undotree()), 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.uv timers, 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 via require(), and fuzzy picker API
  • Built-in vimrc.obsidian.vimrc loader with 75+ configurable settings
  • Flash motions — enhanced f/F/t/T with jump labels, incremental s search, 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/gw operators
  • 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/:later time 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.

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 MessageChannel with requestAnimationFrame in 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 scrollHandler facet for widget-aware scrolling. (#136)
  • Pane cycling and alternate file<C-w>w/W/p cycle panes, <C-^> switches to the alternate file, <C-]>/<C-t> follow and pop links
  • New ex commands:m/:move line moves, :t/:copy line 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.