top of page
90s theme grid background
Writer's pictureGunashree RS

Vertico: Minimal Vertical Completion UI for Emacs

Updated: Sep 16

Introduction: What is Vertico?

Emacs, the powerful and extensible text editor, has long been favored by developers, writers, and technical users for its unparalleled customizability and robust ecosystem. Among its many features, Emacs offers a variety of completion systems that help users quickly and efficiently complete commands, functions, and text. However, the default completion UI in Emacs, while functional, can sometimes feel cluttered or overwhelming, especially when working with large datasets or complex workflows. This is where Vertico comes into play.


Vertico is a minimalistic and performant vertical completion UI designed for Emacs. Unlike some other completion frameworks, Vertico focuses solely on providing a streamlined user interface that integrates seamlessly with Emacs' built-in completion systems. By doing so, it maintains full compatibility with Emacs’ default commands and completion tables, ensuring that users can enjoy a consistent experience across various use cases.


Vertico’s simplicity doesn’t come at the cost of flexibility. The package is designed to be highly modular, allowing users to extend and customize it to suit their specific needs. With a small and maintainable code base—just about 600 lines of code excluding whitespace and comments—Vertico is both lightweight and easy to manage. In this guide, we’ll delve into the features, benefits, and applications of Vertico, exploring why it’s an essential tool for any Emacs user seeking a more efficient and elegant completion experience.



The Need for a Better Completion UI in Emacs

Emacs is known for its extensive capabilities and deep customization options, but its default completion UI can sometimes feel lacking in terms of usability and performance. While powerful, the default UI presents completions in a horizontal format, which can quickly become overwhelming when dealing with a large number of options. Additionally, some users find that the default UI lacks the intuitive behavior and visual clarity needed for complex workflows.


Vertico

Several completion frameworks have emerged over the years to address these shortcomings, but many of them come with their own set of trade-offs. Some are overly complex, introducing additional dependencies or altering the behavior of built-in Emacs functions. Others may provide a better UI but at the cost of performance or compatibility.


Vertico takes a different approach. By focusing solely on the completion UI and reusing Emacs’ built-in completion system, Vertico provides a minimalistic solution that behaves correctly under all circumstances. The result is a more intuitive, visually appealing, and performant completion experience that doesn’t compromise on compatibility or flexibility.



What is Vertico?

Vertico, short for "vertical completion," is an Emacs package that provides a vertical completion UI. It is designed to be lightweight, performant, and fully compatible with Emacs' native completion commands and tables. Unlike some other completion frameworks, Vertico does not attempt to replace or override Emacs’ built-in functionality. Instead, it enhances the existing completion system by presenting completion candidates in a vertical list, making it easier to navigate and select the desired option.


Key Features of Vertico

  • Vertical Completion List: Vertico displays completion candidates in a vertical list, allowing users to quickly scan through options and make selections with ease.

  • Minimalistic Design: The package is designed to be as simple as possible, providing only the UI layer for completion. This minimalistic approach ensures that Vertico remains lightweight and easy to maintain.

  • Full Compatibility: Vertico reuses Emacs' built-in completion system, ensuring that it works seamlessly with existing commands and completion tables. There is no need to learn new commands or adapt to a different workflow.

  • Modular and Extendable: While Vertico is minimalistic by design, it is also highly flexible. Users can extend its functionality with additional packages or customize it to fit their specific needs.

  • Small Code Base: The main vertico.el package contains approximately 600 lines of code (excluding whitespace and comments), making it easy to understand, modify, and maintain.

Vertico is ideal for users who want a more streamlined and visually appealing completion experience in Emacs without sacrificing performance or compatibility.



How Vertico Works

Vertico achieves its goals by leveraging Emacs' built-in completion system while providing a custom UI that presents completion candidates vertically. This approach ensures that Vertico behaves correctly under all circumstances and maintains compatibility with other Emacs packages.


1. Vertical Display of Completion Candidates

The most noticeable feature of Vertico is its vertical display of completion candidates. When a user invokes a completion command (such as M-x), Vertico presents the available options in a vertical list rather than the traditional horizontal format. This vertical layout makes it easier to browse through a large number of candidates, reducing visual clutter and improving navigation.


2. Seamless Integration with Emacs’ Built-in Completion

Vertico is designed to integrate seamlessly with Emacs’ built-in completion system. It does not attempt to replace or override Emacs' native functionality. Instead, it reuses the existing completion commands and tables, ensuring that users can continue to use their preferred commands and workflows without any disruption. This approach also means that Vertico is compatible with other packages that rely on Emacs' completion system.


3. Modular and Extendable Architecture

While Vertico itself is minimalistic, it is designed to be highly modular and extendable. Users can enhance Vertico’s functionality by installing additional packages or writing their extensions. This flexibility allows users to tailor Vertico to their specific needs, whether they require additional features, custom keybindings, or integration with other Emacs tools.


4. Efficient Performance

Performance is a key focus of Vertico. The package is optimized to ensure that it remains responsive, even when working with large datasets or complex workflows. By keeping the code base small and avoiding unnecessary complexity, Vertico delivers a smooth and efficient completion experience.



Benefits of Using Vertico

Vertico offers several benefits for Emacs users who want to improve their completion experience:


1. Improved Usability

The vertical layout provided by Vertico is more intuitive and easier to navigate than the traditional horizontal completion UI. Users can quickly scan through options, making it faster and easier to find and select the desired completion.


2. Enhanced Visual Clarity

By presenting completion candidates in a vertical list, Vertico reduces visual clutter and makes it easier to focus on the task at hand. This is especially beneficial when working with a large number of completion options or when the completion list contains long or complex entries.


3. Full Compatibility with Emacs

Because Vertico reuses Emacs’ built-in completion system, it is fully compatible with existing commands and completion tables. There is no need to learn new commands or modify your workflow to use Vertico. This compatibility also extends to other Emacs packages that rely on the completion system.


4. Flexibility and Customization

While Vertico is minimalistic by design, it is also highly flexible. Users can customize the UI, add extensions, or integrate Vertico with other tools to create a personalized completion experience. This flexibility makes Vertico suitable for a wide range of use cases, from simple text completion to complex coding workflows.


5. Lightweight and Maintainable

With a small code base of around 600 lines, Vertico is lightweight and easy to maintain. Users who want to modify or extend the package can do so with minimal effort, making Vertico an excellent choice for those who value simplicity and maintainability.



How to Install and Configure Vertico

Installing Vertico is a straightforward process, and it can be done using Emacs' built-in package manager. Below, we’ll walk through the steps to install and configure Vertico for the best experience.


Step 1: Install Vertico

To install Vertico, you can use the Emacs package manager M-x package-install. If you haven’t already set up the MELPA repository, you’ll need to do so first.

Add the MELPA repository to your Emacs configuration:

emacs

(require 'package)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
(package-initialize)

Install Vertico using the package manager:

emacs

M-x package-install RET vertico RET

Once installed, you can enable Vertico by adding the following to your Emacs configuration:

emacs

(vertico-mode)

Step 2: Basic Configuration

Vertico works out of the box with minimal configuration, but you can customize it to suit your preferences. For example, you can configure the number of completion candidates displayed in the list:

emacs

(setq vertico-count 10)  ; Display 10 completion candidates at a time

Step 3: Explore Extensions and Enhancements

While Vertico is powerful on its own, you can further enhance it with complementary packages and extensions. Some popular options include:

  • Orderless: A flexible completion style that allows for pattern matching without worrying about the order of characters.

  • Marginalia: Provides additional annotations for completion candidates, such as descriptions, types, or metadata.

  • Embark: An actionable minibuffer interface that works well with Vertico, allowing you to perform actions on completion candidates directly from the minibuffer.

To install these packages, use the Emacs package manager and add the corresponding configuration to your .emacs or init.el file.



Extending and Customizing Vertico

Vertico’s modular architecture makes it easy to extend and customize. Whether you need additional functionality, custom keybindings, or specific integration with other tools, Vertico can be adapted to meet your needs.


1. Using Complementary Packages

As mentioned earlier, Vertico can be combined with other packages to create a more powerful completion system. For example, adding Orderless and Marginalia can significantly enhance the usability of Vertico:

emacs

;; Enable Orderless for flexible completion
(setq completion-styles '(orderless))

;; Enable Marginalia for additional annotations
(marginalia-mode)

2. Custom Keybindings

You can customize the keybindings used in Vertico to better suit your workflow. For example, if you prefer using different keys to navigate the completion list, you can rebind the default keys:

emacs

(define-key vertico-map (kbd "C-n") 'vertico-next)   ; Use C-n for next candidate
(define-key vertico-map (kbd "C-p") 'vertico-previous) ; Use C-p for the previous candidate

3. Writing Your Extensions

If you have specific requirements that aren’t covered by existing packages, you can write your extensions for Vertico. The package’s small and maintainable code base makes it easy to understand and modify. Whether you want to add new commands, change the UI behavior, or integrate with other tools, Vertico provides a solid foundation for customization.



Use Cases for Vertico

Vertico’s flexibility and compatibility make it suitable for a wide range of use cases in Emacs. Here are some examples of how Vertico can enhance your workflow:


1. Coding and Development

For developers, Vertico’s vertical completion UI is a game-changer. Whether you’re completing function names, variable names, or file paths, Vertico provides a more efficient and visually appealing way to navigate completion options. When combined with other packages like Orderless and Marginalia, Vertico becomes an indispensable tool for coding in Emacs.


2. Text Editing and Writing

Writers and editors can benefit from Vertico’s streamlined completion experience. When working with large documents or managing references, Vertico’s vertical layout makes it easier to find and select the correct entry. The reduction in visual clutter helps you stay focused on your writing without being overwhelmed by completion options.


3. File and Buffer Management

Emacs users who frequently switch between files and buffers will appreciate Vertico’s ability to present options in a clear and organized manner. Whether you’re using find-file, switch-to-buffer, or other similar commands, Vertico enhances the navigation experience by displaying completion candidates vertically, making it easier to locate the desired item.


4. Emacs Power Users

For power users who rely on complex workflows and custom commands, Vertico offers the flexibility needed to tailor the completion experience to their needs. With the ability to integrate with other packages and customize keybindings, Vertico provides a powerful yet minimalistic solution that can be adapted to virtually any workflow.



Conclusion: Why Vertico is a Must-Have for Emacs Users

Vertico is a minimalistic, performant, and flexible completion UI that enhances the Emacs experience without compromising on compatibility or usability. By focusing on providing a streamlined and intuitive UI, Vertico addresses many of the shortcomings of Emacs' default completion system. Its vertical layout, full compatibility with built-in commands, and modular design make it an ideal choice for users who want a better completion experience without the overhead of more complex frameworks.


Vertico

Whether you’re a developer, writer, or Emacs power user, Vertico offers a simple yet powerful way to improve your workflow. With its small code base, efficient performance, and extensive customization options, Vertico stands out as one of the best completion UIs available for Emacs today.



Key Takeaways

  1. Vertico is a minimalistic and performant vertical completion UI for Emacs that enhances usability and visual clarity.

  2. It reuses Emacs' built-in completion system, ensuring full compatibility with existing commands and workflows.

  3. Vertico’s vertical layout simplifies navigation, making it easier to browse and select completion candidates.

  4. The package is lightweight and maintainable, with only about 600 lines of code excluding whitespace and comments.

  5. Vertico is highly flexible and can be extended with additional packages like Orderless and Marginalia.

  6. Installation and configuration are straightforward, allowing users to quickly integrate Vertico into their Emacs setup.

  7. Custom keybindings and extensions can be easily implemented, making Vertico adaptable to various use cases.

  8. Vertico is ideal for coding, text editing, file management, and other workflows that benefit from an enhanced completion experience.





Frequently Asked Questions (FAQs)


1. What is Vertico?

Vertico is a minimalistic and performant vertical completion UI for Emacs that enhances the default completion system by displaying completion candidates in a vertical list.


2. How does Vertico differ from other completion frameworks?

Unlike other completion frameworks, Vertico focuses solely on the UI layer and reuses Emacs’ built-in completion system. This ensures full compatibility with existing commands and tables, without adding unnecessary complexity.


3. How do I install Vertico?

Vertico can be installed using Emacs' package manager. Simply add the MELPA repository to your configuration, then run the M-x package-install RET vertico RET.


4. Is Vertico customizable?

Yes, Vertico is highly customizable. You can adjust the number of completion candidates displayed, change keybindings, and extend its functionality with additional packages or custom code.


5. Can Vertico be used with other Emacs packages?

Absolutely. Vertico is compatible with other packages that rely on Emacs' completion system. It also works well with complementary packages like Orderless, Marginalia, and Embark.


6. What are the benefits of using Vertico?

Vertico improves usability, enhances visual clarity, and offers a more intuitive completion experience in Emacs. It is also lightweight, maintainable, and fully compatible with built-in commands.


7. Is Vertico suitable for coding?

Yes, Vertico is ideal for coding workflows. Its vertical completion UI makes it easier to navigate and select functions, variables, and file paths, especially when combined with other tools like Orderless.


8. How can I extend Vertico's functionality?

Vertico’s modular design allows you to extend its functionality with complementary packages, custom keybindings, or by writing your extensions.



Article Sources


Comments


bottom of page