vimtricks.wiki Concise Vim tricks, one at a time.

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 event MyEvent
  • :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 augroup for clean management: augroup MyPlugin | autocmd! | autocmd User ... | augroup END
  • Common pattern: trigger on BufEnter and let plugins listen via User events
  • Check if an event has handlers: :autocmd User MyEvent

Next

How do I return to normal mode from absolutely any mode in Vim?