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, Lua configuration with vim.keymap.set / vim.opt / vim.fn / vim.api / vim.tbl_* / autocommands / timers / highlight groups, 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, vim.fn, vim.api (buffer APIs, nvim_set_hl), vim.tbl_*, vim.json, vim.inspect, vim.schedule/vim.uv timers, 12 autocommand events, buffer-local keymaps, and vim.obsidian namespace
  • Built-in vimrc.obsidian.vimrc loader with 35+ configurable settings
  • 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 (vim-surround)
  • Hard-wrap formatting — Markdown-aware gq/gw operators
  • 60+ ex commands:sp, :vs, :e, :grep, :ob, and more
  • Vimium-style hints — navigate the entire Obsidian UI with keyboard hints

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

  • Lua API expansion — 22 table/string utilities (vim.tbl_deep_extend, vim.split, vim.inspect, vim.json), async primitives (vim.schedule, vim.defer_fn, vim.uv timers), buffer-local keymaps, buffer content APIs (nvim_buf_get_lines/nvim_buf_set_lines), nvim_set_hl highlight customization, vim.obsidian namespace, sandboxed vim.env, 4 new autocmd events, and enhanced vim.notify with log levels.

See the full changelog for details.