Minimalistic Obsidian-like note system inside Vim (Vim9script).
Vimsidian brings wiki-links, backlinks, daily notes, reminders, templates, fuzzy picker, and a vault explorer directly into your Vim β no Electron, no bloat.
- π Wiki links:
[[note-name]]and[[path/to/note]] - π·οΈ Tags:
#tagnamewith autocomplete - π Template system with variables (
{{TITLE}},{{DATE}}, etc.) - β° Reminders:
every:1d,every:monday,on:2026-04-20 - π Hybrid fuzzy search (filename + content)
- π Automatic note creation
- π Backlinks search via quickfix
- π Daily notes with auto-added reminders
- π Interactive picker with preview
- π³ Built-in vault explorer
- βοΈ Markdown checkbox support
- π Markdown formatting helpers
- πΊοΈ Interactive graph view (backlinks + outgoing links)
- π§ Clean architecture (core / ui / editor separation)
- β‘ Written in Vim9script
autoload/
βββ core/
β βββ backlinks.vim # Backlinks search
β βββ daily.vim # Daily notes
β βββ notes.vim # Note operations
β βββ path.vim # Path resolution & slugify
β βββ reminders.vim # Reminders system
β βββ tags.vim # Tags system
β βββ templates.vim # Template system
β βββ vault.vim # Vault configuration
βββ editor/
β βββ checkbox.vim # Checkbox toggling
β βββ list.vim # List handling
β βββ markdown.vim # Markdown formatting
β βββ tags_complete.vim # Tag autocomplete
β βββ visual.vim # Visual mode helpers
βββ ui/
β βββ explorer/
β β βββ explorer.vim # Vault tree explorer
β βββ graph/
β β βββ domain/
β β β βββ graph_state.vim # Graph state management
β β βββ graph.vim # Graph public API
β β βββ infrastructure/
β β βββ window.vim # Graph popup window
β βββ new_note.vim # New note picker
β βββ picker.vim # Fuzzy picker
β βββ picker_logic.vim # Picker business logic
β βββ wiki_links.vim # Wiki link handling
βββ vimsidian.vim
plugin/
βββ vimsidian.vim # Plugin entry point
syntax/
βββ markdown.vim # Markdown syntax highlighting
Using vim-plug:
Plug 'greeschenko/vimsidian'After installation, load help with:
:helptags ALLOr restart Vim and the help will be loaded automatically.
" Required: Set your vault path
let g:vimsidian_vault_path = '~/your-vault'
" Optional: Default template for new notes (default: 'blank')
let g:vimsidian_default_template = 'daily'Notes are stored inside:
{vault}/data/
:VimsidianNew [title] " Create note (opens picker if no title)
:VimsidianOpen {title} " Open existing note
:VimsidianFollowLink " Follow [[link]] under cursor
:VimsidianToday " Open today's daily note
:VimsidianBacklinks " Show backlinks
:VimsidianPicker " Open note picker
:VimsidianToggleExplorer " Open vault/data explorer
:VimsidianToggleGraph " Toggle graph panel
:VimsidianReminders " Show reminders file
:VimsidianScanReminders " Force scan all notes for reminders
:VimsidianScanTags " Force scan all notes for tags:VimsidianToggleCheckbox " Toggle checkbox on current line
:VimsidianToggleCheckboxVisual " Toggle checkboxes in visual selection
:VimsidianMakeCheckbox " Convert current line into checkbox
:VimsidianToggleBold " Toggle bold in visual mode
:VimsidianToggleItalic " Toggle italic in visual mode
:VimsidianToggleCode " Toggle inline code in visual mode
:VimsidianToggleCodeBlock " Toggle fenced code block in visual mode
:VimsidianToggleQuote " Toggle quote block in visual mode
:VimsidianToggleList " Toggle markdown list in visual mode<leader>vn New note (opens picker)
<leader>vv Open picker
<leader>vf Follow wiki link under cursor
<leader>vt Open today's note
<leader>vb Show backlinks
<leader>ve Open vault explorer
<leader>vg Toggle graph panel
<leader>vr Show remindersThese mappings are enabled automatically for markdown files.
Normal mode:
<C-x> Toggle checkbox
<C-c> Convert line into checkbox
<CR> Continue current list / checkbox
Insert mode (in markdown):
<C-x><C-o> Tag autocomplete (after #)
Visual mode:
<C-x> Toggle checkbox
<C-b> Toggle bold
<C-i> Toggle italic
<C-c> Toggle inline code
<C-C> Toggle code block
<C-q> Toggle quote block
<C-l> Toggle markdown list- Stored as
.mdfiles - Located in
{vault}/data/ - Created automatically when opening a missing note
[[my-note]]
[[projects/my-note]]
- Automatically resolved via link parser
- Target note is created automatically if missing
Templates are stored in {vault}/data/templates/.
Available variables:
| Variable | Description |
|---|---|
{{TITLE}} |
Note title |
{{DATE}} |
YYYY-MM-DD |
{{TIME}} |
HH:MM |
{{DATETIME}} |
YYYY-MM-DD HH:MM |
{{YEAR}} |
Year |
{{MONTH}} |
Month (01-12) |
{{DAY}} |
Day (01-31) |
{{WEEKDAY}} |
Day name |
{{VAULT}} |
Vault path |
{{TEMPLATE}} |
Template name |
Default templates:
blank.md- Empty note with titledaily.md- Daily note with Tasks/Notes/Review sections
Add reminders using checkbox syntax:
- [ ] Call mom every:sunday
- [ ] Pay bills every:1d
- [ ] Review notes every:1w
- [ ] Meeting on:2026-04-25
- [ ] Check reports every:15sSyntax:
every:Nd- Every N daysevery:Nw- Every N weeksevery:monday- Every Monday (or any day name)every:Ns- Nth day of monthon:YYYY-MM-DD- One-time reminder
Behavior:
- Scanned on Vim startup and daily note creation
- Due reminders auto-added to daily note
- Consolidated view in
data/reminders.md
Add tags using #tagname syntax anywhere in your notes:
#project #review #important
This note is about the project.Usage:
- Type
#in picker to filter notes by tag - In markdown files:
Ctrl-x Ctrl-oto trigger tag autocomplete - Tags are highlighted with unique color in markdown
Behavior:
- Auto-refreshes on autocomplete trigger
- Search by tag in picker with
#tagname
Features:
- Live fuzzy filtering
- Arrow navigation
- Preview pane with file content
- Content search (starts after 3 seconds)
Actions:
Enterβ open noteCtrl-iβ insert wiki linkEscβ close pickerTab/Downβ cycle templates (in new note picker)
Tree-based file explorer for {vault}/data/.
Keymaps:
Enteroro- Open file / toggle directoryr- RefreshC-d- DeleteC-y- CopyC-p- PasteC-m- Moveq- Close
Interactive 3-panel graph view showing current note with backlinks (left) and outgoing links (right).
Keymaps:
h/Left- Move to backlinks panell/Right- Move to links panelj/Down- Navigate down in current panelk/Up- Navigate up in current panelEnteroro- Open selected noteq- Close graph panel
- Titles remain unchanged (UTF-8)
- File names are transliterated to ASCII
Example:
ΠΠ°Π΄Π°ΡΠ° β zadacha.md
Benefits:
- Stable filenames
- Reliable search
- No encoding issues
Vimsidian follows a clean layered design:
core/β business logic (notes, reminders, templates)ui/β Vim interaction layer (picker, explorer)editor/β markdown editing helpersvimsidian.vimβ public facadeplugin/vimsidian.vimβ commands and autocmds
This keeps:
- code testable
- logic reusable
- UI decoupled
- Tags support (
#tag) - Graph view
- Media insertion helpers
Pull requests are welcome.
Ideas for improvement:
- architecture
- performance
- markdown UX
- picker experience
- vault navigation
Feel free to contribute.