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 `).