How do I create and trigger custom autocommand events in Vim?
Answer
:doautocmd User MyEvent
Explanation
Vim's User event type lets you define custom events that fire on demand. This enables a publish-subscribe pattern in your vimrc or plugins — one script can trigger an event, and others can listen for it, creating loosely-coupled extensibility.
How it works
autocmd User MyEvent {command}— register a handler for custom eventMyEvent:doautocmd User MyEvent— trigger the event, running all registered handlers- Multiple handlers can be registered for the same event
- Handlers run in the order they were registered
Example
" Register handlers
autocmd User ProjectOpen echom 'Project loaded!'
autocmd User ProjectOpen source .vimrc.local
" Trigger the event
:doautocmd User ProjectOpen
Output:
Project loaded!
(and .vimrc.local is sourced)
Tips
- Use
autocmd!to clear handlers before re-registering to avoid duplicates - Wrap in
augroupfor clean management:augroup MyPlugin | autocmd! | autocmd User ... | augroup END - Common pattern: trigger on
BufEnterand let plugins listen viaUserevents - Check if an event has handlers:
:autocmd User MyEvent