Vertico: Minimalist Vertical Interactive Completion

https://github.com/minad/vertico

Vertico is a package consisting of a small codebase that offers vertical completion and full compatability with the built-in Emacs completion commands and completion tables. It supports many extensions, making for a simple yet rich experience. It aims to be unobtrusive.

Configuration

See sample configuration at https://github.com/minad/vertico

Complementary packages

  • Marginalia: Annotations in the minibuffer
  • Consult: Useful search and navigation commands
  • Embark: Minibuffer actions and context menu
  • Orderless: Advanced completion style

Main Features

  • Shows on 1st line the index of the current candidate and total count
  • TAB selects (i.e. inserts the currently highlighted candidate into the minibuffer where it can be further edited)
  • RET executes
  • Non-existing candidates can be submitted with M-RET (vertico-exit-input) or by moving the point to the prompt (useful for creating new files and buffers)
  • Efficient sorting
  • Lazy highlighting increases performance

Difference with Vanilla Emacs

In Vertico TAB inserts the currently selected candidate. In Vanilla Emacs tab completes.

If you prefer to have the default completion commands available you can add new bindings or even replace the Vertico bindings.

Customisations

Disable case sensitivity for file searching:

(setq read-file-name-completion-ignore-case t
      read-buffer-completion-ignore-case t
      completion-ignore-case t)

Extensions

The extensions are installed together with Vertico and must be enabled via the CUI.

They allow users to replicate the behaviour of other completion frameworks like IDO and Helm among other things.

  • The combination of vertico-flat and vertico-directory resembles Ido Mode
  • vertico-buffer provides a Helm like experience
  • vertico-unobtrusive displays only the topmost candidate.

The package allows for many further configurations.

Flaws

Small things: I like previous-history-element and next-history-element bound to my up and down arrows as per Vanilla Emacs. Now I am forced to use M-p and M-n by default. The history provides more information that I want too.

Return to Home