gemini://://carcosa.net/journal/20221117-emacs-vertico.gmi
#

Enabling a simple-but-good minibuffer completion experience in Enabling a simple-but-good minibuffer completion experience in Emacs

I mentioned on [emacs.ch] that to use Emacs effectively, you don't actually have to memorize all of the cryptic multi-chord keybindings for every mode you use. If you know the basics, you can pretty much always do anything you need in just a few keystrokes using M-x and a decent minibuffer completion system. I recommended the lightweight completion stack of `vertico `, `marginalia `, `orderless `, and `prescient `, a set of packages that work well together and with Emacs' built-in completion systems. Someone requested that I post my config, and it took me a while to get to it, but here it is.

```
;; Enable richer annotations using the Marginalia package
```
(use-package marginalia :ensure t
```
  ;; Either bind `marginalia-cycle` globally or only in the minibuffer
```
  :bind (("M-A" . marginalia-cycle)
```
         :map minibuffer-local-map
```
         ("M-A" . marginalia-cycle))
```
  :init
```
  (marginalia-mode)
```
  (setq marginalia-annotators '(marginalia-annotators-heavy
```
                                marginalia-annotators-light nil)))
```
```
;; Enable vertico
```
  (use-package vertico :ensure t
```
    :commands 'vertico-mode
```
    :init
```
    (vertico-mode))
```
```
  ;;; If you always use graphical emacs, you might want your completions to pop up
```
  ;;; in a child frame like in some popular graphical editors.
```
  ;; (use-package vertico-posframe :ensure t
```
  ;;   :commands 'vertico-posframe-mode
```
  ;;   :custom ((vertico-posframe-poshandler  #'posframe-poshandler-frame-top-center))
```
  ;;   :init (vertico-posframe-mode -1))
```
```
  (use-package orderless :ensure t
```
    :init
```
    ;; Tune the global completion style settings to your liking!
```
    ;; This affects the minibuffer and non-lsp completion at point.
```
    (setq completion-styles '(orderless partial-completion)
```
          completion-ignore-case t
```
          completion-category-defaults nil
```
          completion-category-overrides '((file (styles . (partial-completion))))))
```
```
  (use-package prescient :ensure t
```
    :config
```
    (setq prescient-sort-full-matches-first t
```
          prescient-use-case-folding t))
```
  (use-package vertico-prescient :ensure t
```
    :after (prescient vertico)
```
    :config (vertico-prescient-mode))

Note that this guide only covers minibuffer completion, which is what you need for getting the most of M-x. For in-buffer completion (for programming languages or spelling), you will probably want another package, probably `corfu `, to pop up selection menus, though it's also possible with a few more lines of code to use `vertico ` (etc) for in-buffer completion (when you call `completion-at-point `).