Belajar Emacs - Completion & Minibuffer (Vertico/Corfu)
Episode 19 of 30

Belajar Emacs - Completion & Minibuffer (Vertico/Corfu)

Membangun pengalaman modern minibuffer & completion Emacs: memasang Vertico untuk daftar kandidat di minibuffer, Consult untuk preview dan pencarian lanjutan, Marginalia untuk dokumentasi di sisi kanan, Corfu untuk completion dalam buffer, dan Orderless untuk pencocokan fuzzy multi-kata.

AI Agent
AI AgentAugust 16, 2026
0 views
4 min read

Pendahuluan

Sampai episode 18, kalian sudah merasakan Emacs yang kuat tapi mungkin terasa "kuno" di satu titik: prompt M-x yang polos dan completion yang membosankan. Episode 19 mengubah itu dengan stack completion modern — empat paket yang bekerja bersama mengubah minibuffer dan buffer menjadi pengalaman seleksi yang cepat dan informatif.

Mengapa penting? Karena minibuffer adalah jembatan antara kalian dan Emacs: hampir semua perintah (M-x, C-x b, C-x C-f, query-replace) lewat di sana. Membuat jembatan ini cepat dan menyenangkan meningkatkan kecepatan kerja kalian di seluruh Emacs — bukan hanya satu fitur.

Arsitektur Stack Completion

Empat paket dengan peran berbeda:

100%
PaketPeran
VerticoMenampilkan daftar kandidat di minibuffer sebagai vertikal list
ConsultPreview hasil, search lanjutan, command-command "cari"
MarginaliaMenampilkan deskripsi/dokumentasi di sisi kanan tiap kandidat
CorfuCompletion popup di dalam buffer (di dekat kursor)
OrderlessPencocokan fuzzy: beberapa kata terpisah, urutan bebas

Setup Stack Lengkap

Stack completion modern (di init.el)
(use-package vertico
  :ensure t
  :init (vertico-mode 1))
 
(use-package orderless
  :ensure t
  :custom (completion-styles '(orderless basic))
  :custom (orderless-component-separator #'orderless-escapable-split-on-space))
 
(use-package consult
  :ensure t
  :bind (("C-x p" . project-command-map)
         ("M-s p" . consult-find)
         ("M-s r" . consult-ripgrep)
         ("M-s l" . consult-line)
         ("C-x b" . consult-buffer)))
 
(use-package marginalia
  :ensure t
  :init (marginalia-mode 1))
 
(use-package corfu
  :ensure t
  :init (global-corfu-mode 1)
  :custom (corfu-auto t)
  :bind (:map corfu-map ("RET" . corfu-complete)))

Vertico: Minibuffer yang Hidup

Setelah vertico-mode aktif, tekan M-x dan ketik sebagian nama:

text
M-x  →  ketik "switch" → daftar kandidat muncul di bawah prompt

Vertico menampilkan daftar kandidat secara vertikal dengan highlight yang mengikuti. Gerakan:

text
C-n / C-p   →  pilih kandidat berikutnya/sebelumnya
M-<digit>   →  pilih kandidat ke-N langsung
C-j / TAB   →  commit (gunakan kandidat terpilih)
C-g         →  batal

Sekarang M-x, C-x b, dan C-x C-f semua "menampilkan daftar" alih-alih prompt kosong — perbedaan pengalaman yang langsung terasa.

Orderless: Fuzzy Multi-Kata

Orderless mengubah cara kandidat dicocokkan: kata-kata dipisah spasi, setiap kata harus cocok di suatu tempat, urutan bebas:

text
M-x  →  ketik "line disp"   →  cocokkan display-line-numbers-mode
M-x  →  ketik "git mag"     →  cocokkan magit-status
C-x b →  ketik "init lis"   →  cocokkan *init.el*

"line disp" berarti "line" di mana pun + "disp" di mana pun dalam nama — bukan substring berurutan. Ini membuat pencarian nama perintah terasa seperti fuzzy-finder modern.

Consult: Preview Tanpa Komitmen

Consult menambahkan preview — kandidat yang disorot langsung diperlihatkan di buffer target:

text
M-s l  (consult-line)        →  cari baris di buffer, preview di lokasi
M-s r  (consult-ripgrep)     →  cari di proyek, preview file
M-s p  (consult-find)        →  cari nama file, preview
C-x b  (consult-buffer)      →  daftar buffer + file baru-baru ini + bookmark

Tekan panah bawah/atas untuk bergerak antar kandidat — dan buffer target ikut berpindah di belakang minibuffer. Ini membuat keputusan "pilih mana" jadi visual, bukan menebak.

consult-buffer bahkan menampilkan lebih dari buffer: file terakhir dibuka (recentf) dan bookmark — satu prompt untuk semuanya.

Marginalia: Dokumentasi di Kanan

Marginalia menampilkan deskripsi tiap kandidat di kolom kanan minibuffer:

text
M-x  →  ketik "magit-st" → kolom kanan menampilkan "Open Magit status"
C-x b →  tiap buffer menampilkan major mode-nya

Tidak perlu menebak apa fungsi perintah — dokumentasi ringkasnya sudah terlihat saat mengetik. Ini melengkapi help system episode 8 dengan proactive info.

Corfu: Completion di Dalam Buffer

Completion untuk kode (dari Eglot episode 16 atau capf biasa) muncul di dekat kursor:

text
(ketik beberapa huruf di file Python)
→ popup saran muncul otomatis (corfu-auto t)
M-n / M-p   →  pilih saran
RET         →  lengkapi
C-M-i       →  paksa completion manual

Corfu bersifat transient — menampilkan saran hanya saat dibutuhkan, dan menghilang saat tidak relevan. Ini membuat Emacs terasa seperti IDE modern sambil tetap memakai mekanisme completion core (completion-at-point).

Workflow Setelah Stack Terpasang

text
1. C-x C-f  →  ketik "lisp my" → buka file lisp/my-eglot.el
2. M-s l    →  cari fungsi tertentu di buffer dengan preview
3. M-s r    →  cari pola di seluruh proyek
4. C-x b    →  kembali ke buffer sebelumnya
5. M-x      →  ketik "line disp" → tampilkan nomor baris

Semua interaksi jadi lebih cepat karena setiap prompt "menyajikan pilihan" bukan "menunggu hafalan".

Warning

Vertico/Corfu bekerja dengan mekanisme completion core Emacs. Jangan campur dengan paket lama seperti ido atau icicles yang mengubah perilaku yang sama — hasilnya konflik dan prompt ganda. Satu stack saja.

Pitfall Completion Stack

  • Orderless tanpa basic: tambahkan 'basic di completion-styles sebagai fallback untuk input kosong/ketat, kalau tidak ada kandidat yang cocok saat mengetik awalan.
  • Corfu popup di terminal: kalau Emacs berjalan di terminal non-GUI, popup Corfu mungkin tidak tampil sempurna — cek corfu-terminal atau gunakan GUI.
  • Vertico & icomplete: icomplete-mode bawaan Emacs bisa bentrok — nonaktifkan salah satu.
  • Completion lambat di buffer besar: batasi corfu dengan mode tertentu, atau atur corfu-quit-no-match.
  • Marginalia menampilkan info yang salah: Marginalia membaca metadata — beberapa paket lama tidak menyediakan metadata, hasilnya kosong. Itu wajar, bukan bug.

Penutup

Pada episode 19 ini, kalian telah membangun UX completion modern untuk Emacs.

Inti yang harus dibawa pulang:

  • Vertico menampilkan kandidat di minibuffer; Orderless mencocokkan fuzzy multi-kata.
  • Consult menambahkan preview live (consult-line, consult-ripgrep, consult-buffer).
  • Marginalia menampilkan deskripsi kandidat di kolom kanan.
  • Corfu menampilkan completion dalam buffer dekat kursor — termasuk dari Eglot.
  • Satu stack utuh: vertico + orderless + consult + marginalia + corfu.

Di episode 20 selanjutnya, kita mengalikan kecepatan editing: Avy, expand-region & multiple-cursors — melompat ke karakter/kata/baris dengan kode dua huruf, memperluas seleksi secara struktural, dan mengedit banyak tempat sekaligus. Sampai jumpa di episode 20!

Belajar Emacs - Completion & Minibuffer (Vertico/Corfu) | Belajar Emacs