# Referensi Cepat Emacs

*Navigasi, editing, buffer, pencarian, org mode, paket*

> Source: GNU Emacs Manual (gnu.org/software/emacs) · MIT

## Navigasi

### Pergerakan Kursor

| Command | Description |
|---------|-------------|
| `C-f / C-b` | Maju / mundur satu karakter |
| `M-f / M-b` | Maju / mundur satu kata |
| `C-n / C-p` | Baris berikutnya / sebelumnya |
| `C-a / C-e` | Awal / akhir baris |
| `M-a / M-e` | Awal / akhir kalimat |
| `C-v / M-v` | Gulir ke bawah / atas satu halaman |
| `M-< / M->` | Awal / akhir buffer |
| `M-g g` | Pergi ke nomor baris |

### Posisi Layar

| Command | Description |
|---------|-------------|
| `C-l` | Pusatkan layar (siklus atas/tengah/bawah) |
| `C-M-l` | Posisikan ulang window secara heuristik |

## Editing

### Kill & Yank (Cut & Paste)

| Command | Description |
|---------|-------------|
| `C-k` | Kill hingga akhir baris |
| `C-w` | Kill region (cut) |
| `M-w` | Salin region |
| `C-y` | Yank (paste) |
| `M-y` | Siklus kill ring setelah yank |
| `C-d` | Hapus karakter ke depan |
| `M-d` | Kill kata ke depan |
| `M-DEL` | Kill kata ke belakang |

### Undo & Transpose

| Command | Description |
|---------|-------------|
| `C-/ or C-_` | Undo |
| `C-g C-/` | Redo (undo yang undo) |
| `C-t` | Transpose karakter |
| `M-t` | Transpose kata |
| `C-x C-t` | Transpose baris |

### Seleksi

| Command | Description |
|---------|-------------|
| `C-SPC` | Set mark (mulai seleksi) |
| `C-x h` | Pilih seluruh buffer |
| `M-h` | Pilih paragraf |
| `C-x C-x` | Tukar point dan mark |

## Buffer & Window

### Buffer

| Command | Description |
|---------|-------------|
| `C-x b` | Pindah ke buffer |
| `C-x C-b` | Tampilkan semua buffer |
| `C-x k` | Kill (tutup) buffer |
| `C-x LEFT / RIGHT` | Buffer sebelumnya / berikutnya |

### Window

| Command | Description |
|---------|-------------|
| `C-x 2` | Bagi window secara horizontal |
| `C-x 3` | Bagi window secara vertikal |
| `C-x 0` | Tutup window saat ini |
| `C-x 1` | Tutup semua window lainnya |
| `C-x o` | Pindah ke window lain |
| `C-x ^` | Perbesar window secara vertikal |
| `C-x {` | Perkecil window secara horizontal |

### Frame

| Command | Description |
|---------|-------------|
| `C-x 5 2` | Buat frame baru |
| `C-x 5 0` | Hapus frame saat ini |
| `C-x 5 o` | Pindah ke frame lain |

## Pencarian & Penggantian

### Pencarian Inkremental

| Command | Description |
|---------|-------------|
| `C-s` | Cari ke depan (inkremental) |
| `C-r` | Cari ke belakang (inkremental) |
| `C-s C-s` | Ulangi pencarian terakhir ke depan |
| `C-M-s` | Pencarian regex ke depan |
| `C-M-r` | Pencarian regex ke belakang |
| `RET` | Keluar pencarian di posisi saat ini |
| `C-g` | Batal pencarian, kembali ke awal |

### Penggantian

| Command | Description |
|---------|-------------|
| `M-%` | Query replace |
| `C-M-%` | Query replace regexp |
| `y` | Ganti kecocokan ini |
| `n` | Lewati kecocokan ini |
| `!` | Ganti semua yang tersisa |
| `q` | Keluar dari penggantian |

## File

### Operasi File

| Command | Description |
|---------|-------------|
| `C-x C-f` | Cari (buka) file |
| `C-x C-s` | Simpan buffer saat ini |
| `C-x C-w` | Simpan sebagai (tulis ke file baru) |
| `C-x s` | Simpan semua buffer yang dimodifikasi |
| `C-x C-r` | Buka file read-only |
| `C-x i` | Sisipkan isi file di posisi kursor |

### Dired (Directory Editor)

| Command | Description |
|---------|-------------|
| `C-x d` | Buka direktori di Dired |
| `d / x` | Tandai untuk dihapus / eksekusi penghapusan |
| `R` | Ganti nama / pindahkan file |
| `C` | Salin file |
| `+` | Buat direktori |
| `g` | Refresh daftar |

## Mode

### Major Mode

| Command | Description |
|---------|-------------|
| `M-x fundamental-mode` | Editing teks biasa |
| `M-x text-mode` | Teks dengan fill dan spell |
| `M-x prog-mode` | Basis untuk mode pemrograman |
| `M-x python-mode` | Editing dan indentasi Python |
| `M-x shell-mode` | Shell interaktif dalam buffer |

### Minor Mode Berguna

| Command | Description |
|---------|-------------|
| `M-x display-line-numbers-mode` | Toggle nomor baris |
| `M-x auto-fill-mode` | Auto-wrap pada fill column |
| `M-x flyspell-mode` | Pemeriksaan ejaan on-the-fly |
| `M-x column-number-mode` | Tampilkan kolom di mode line |
| `M-x whitespace-mode` | Visualisasi whitespace |
| `M-x electric-pair-mode` | Auto-tutup tanda kurung dan kutipan |

## Dasar Org Mode

### Struktur

| Command | Description |
|---------|-------------|
| `* / ** / ***` | Tingkat heading 1 / 2 / 3 |
| `TAB` | Siklus visibilitas heading |
| `S-TAB` | Siklus visibilitas global |
| `M-RET` | Sisipkan heading setingkat |
| `M-LEFT / M-RIGHT` | Promosi / demosi heading |
| `M-UP / M-DOWN` | Pindahkan subtree ke atas / bawah |

### TODO & Checkbox

| Command | Description |
|---------|-------------|
| `C-c C-t` | Siklus status TODO |
| `C-c C-d` | Set deadline |
| `C-c C-s` | Jadwalkan item |
| `C-c C-c` | Toggle checkbox [ ] / [X] |
| `C-c a` | Buka tampilan agenda |

### Link & Ekspor

| Command | Description |
|---------|-------------|
| `C-c C-l` | Sisipkan / edit link |
| `C-c C-o` | Buka link di posisi kursor |
| `C-c C-e` | Dispatcher ekspor (HTML, PDF, dll.) |

## Manajemen Paket

### package.el

| Command | Description |
|---------|-------------|
| `M-x list-packages` | Jelajahi paket yang tersedia |
| `i / d / x` | Tandai install / hapus / eksekusi |
| `U` | Tandai semua yang bisa diupgrade |
| `M-x package-refresh-contents` | Refresh daftar paket |

### use-package (init.el)

```
(use-package magit
  :ensure t
  :bind ("C-x g" . magit-status))
(use-package company
  :ensure t
  :hook (prog-mode . company-mode))
```

## Konfigurasi

### File Konfigurasi Utama

| Command | Description |
|---------|-------------|
| `~/.emacs.d/init.el` | File konfigurasi utama |
| `~/.emacs.d/early-init.el` | Inisialisasi awal (sebelum GUI, Emacs 27+) |
| `~/.emacs.d/custom.el` | Pengaturan yang ditulis oleh Customize |

### Pengaturan Umum

```
(setq inhibit-startup-screen t)
(tool-bar-mode -1)
(set-face-attribute 'default nil :height 120)
(global-display-line-numbers-mode 1)
(setq make-backup-files nil)
```

### Sistem Bantuan

| Command | Description |
|---------|-------------|
| `C-h k` | Deskripsikan key binding |
| `C-h f` | Deskripsikan fungsi |
| `C-h v` | Deskripsikan variabel |
| `C-h m` | Deskripsikan mode saat ini |
| `C-h t` | Buka tutorial Emacs |
| `C-h i` | Buka dokumentasi Info |

## Pola Umum

### Editing Persegi

| Command | Description |
|---------|-------------|
| `C-x SPC` | Mulai mode mark persegi |
| `C-x r k` | Kill persegi |
| `C-x r y` | Yank persegi |
| `C-x r t` | Ganti persegi dengan string |
| `C-x r o` | Sisipkan persegi kosong |

### Macro

| Command | Description |
|---------|-------------|
| `C-x (` | Mulai rekam macro |
| `C-x )` | Hentikan rekam macro |
| `C-x e` | Eksekusi macro terakhir |
| `C-u 10 C-x e` | Eksekusi macro 10 kali |
| `M-x name-last-kbd-macro` | Beri nama macro untuk digunakan ulang |

### Shell & Eval

| Command | Description |
|---------|-------------|
| `M-x shell` | Buka shell dalam buffer |
| `M-x eshell` | Shell Emacs Lisp |
| `M-!` | Jalankan perintah shell |
| `M-x eval-buffer` | Evaluasi seluruh buffer sebagai Elisp |
| `C-x C-e` | Evaluasi ekspresi Elisp sebelum kursor |
