Skip to content

messages

Enables Zonvie’s external messages UI (ext_messages) and controls where each class of message is shown.

[messages]
external = true
msg_pos = { ext-float = "window", mini = "grid" } # display, window, or grid
# Where each class of message goes. These retarget the built-in routes, so
# most setups need nothing else.
view = "ext-float" # ordinary messages
view_error = "ext-float" # emsg, echoerr, lua_error, rpc_error
view_warn = "ext-float" # wmsg
view_history = "split" # :messages / :history
view_search = "mini" # search_count
Key Description
external Use external messages UI (true/false)
msg_pos Position anchor for message views: { ext-float = "...", mini = "..." }. Values: “display”, “window”, “grid”
view View for ordinary messages (default “ext-float”)
view_error View for errors: emsg, echoerr, lua_error, rpc_error (default “ext-float”)
view_warn View for warnings: wmsg (default “ext-float”)
view_history View for :messages / :history (default “split”)
view_search View for search_count (default “mini”)

View types are "mini", "ext-float", "confirm", "split", "none", and "notification". Each view has its own auto-hide default: "mini" and "ext-float" hide after 4 seconds, while "split", "confirm", and "notification" stay until dismissed. A route’s timeout overrides that.

Routes you declare are consulted before the built-in ones and never replace them, so declaring a rule for msg_show leaves :messages and the mode/command indicators on their defaults. The first match wins.

# Long output is easier to read in a split.
[[messages.routes]]
event = "msg_show"
min_height = 20
view = "split"
# Hide the ruler outright.
[[messages.routes]]
event = "msg_ruler"
skip = true
Key Description
event Event type: “msg_show”, “msg_showmode”, “msg_showcmd”, “msg_ruler”, “msg_history_show” (optional, omit to match all)
kind Array of message kinds to match (optional, omit to match all). Kinds: “emsg”, “echoerr”, “lua_error”, “rpc_error”, “wmsg”, “search_count”, “shell_out”, etc. Interactive prompt kinds are not matchable.
level Match by severity instead of kind: “info”, “warn”, or “error” (optional)
view View type (see the list above)
timeout Auto-hide timeout in seconds (optional, 0 = no auto-hide)
min_height Minimum line count to match (optional)
max_height Maximum line count to match (optional)
skip Do not display this message at all (optional)
enter Whether showing the message moves the cursor into the view (optional). Only meaningful for “split” — the ext-float view is a synthetic grid the cursor cannot enter. Unset means the channel default: :messages takes the cursor, routed messages do not.

return_prompt is never routed: Zonvie answers the press-enter prompt for you, since the message it confirms has already been displayed.

Interactive prompts ("confirm", "confirm_sub", "number_prompt") are not configurable — they always reach the confirm view with no timeout, because Neovim blocks until one is answered. Routes that would send them elsewhere, skip them, or auto-hide them are overridden.