# Referensi Cepat Vim

*Mode, navigasi, editing, pencarian, macro, buffer*

> Source: Vim Documentation (vimdoc.sourceforge.net) · MIT

## Mode

### Pergantian Mode

| Command | Description |
|---------|-------------|
| `i` | Mode insert (sebelum kursor) |
| `a` | Mode insert (setelah kursor) |
| `o` | Sisipkan baris di bawah dan masuk mode insert |
| `O` | Sisipkan baris di atas dan masuk mode insert |
| `v` | Mode visual (karakter) |
| `V` | Mode visual (baris) |
| `Ctrl+v` | Mode visual blok |
| `:` | Mode command-line |
| `R` | Mode replace |
| `Esc` | Kembali ke mode normal |

## Navigasi

### Gerakan Karakter dan Baris

| Command | Description |
|---------|-------------|
| `h j k l` | Kiri, bawah, atas, kanan |
| `0 / ^` | Awal baris / karakter non-spasi pertama |
| `$` | Akhir baris |
| `w / W` | Kata berikutnya / KATA berikutnya |
| `b / B` | Kata sebelumnya / KATA sebelumnya |
| `e / E` | Akhir kata / KATA |
| `f{c} / F{c}` | Cari karakter ke depan / belakang |
| `t{c} / T{c}` | Hingga karakter ke depan / belakang |

### Gerakan Layar dan File

| Command | Description |
|---------|-------------|
| `gg / G` | Ke baris pertama / terakhir |
| `:{n}` | Ke baris n |
| `Ctrl+d / Ctrl+u` | Setengah halaman bawah / atas |
| `Ctrl+f / Ctrl+b` | Satu halaman penuh bawah / atas |
| `H / M / L` | Atas / tengah / bawah layar |
| `%` | Lompat ke tanda kurung yang cocok |

## Editing

### Insert dan Append

| Command | Description |
|---------|-------------|
| `I` | Insert di awal baris |
| `A` | Tambahkan di akhir baris |
| `ea` | Tambahkan di akhir kata |
| `gi` | Insert di posisi insert terakhir |

### Hapus dan Ubah

| Command | Description |
|---------|-------------|
| `x / X` | Hapus karakter di bawah / sebelum kursor |
| `dd` | Hapus baris |
| `dw` | Hapus kata |
| `d$ / D` | Hapus hingga akhir baris |
| `cc / S` | Ubah seluruh baris |
| `cw` | Ubah kata |
| `c$ / C` | Ubah hingga akhir baris |
| `ci" / ci(` | Ubah dalam tanda kutip / kurung |

### Salin dan Tempel

| Command | Description |
|---------|-------------|
| `yy` | Salin baris |
| `yw` | Salin kata |
| `y$` | Salin hingga akhir baris |
| `p / P` | Tempel setelah / sebelum kursor |
| `J` | Gabungkan baris di bawah ke baris saat ini |

### Undo dan Ulangi

| Command | Description |
|---------|-------------|
| `u` | Undo |
| `Ctrl+r` | Redo |
| `.` | Ulangi perintah terakhir |

## Cari dan Ganti

### Pencarian

| Command | Description |
|---------|-------------|
| `/pattern` | Cari ke depan |
| `?pattern` | Cari ke belakang |
| `n / N` | Hasil berikutnya / sebelumnya |
| `*` | Cari kata di bawah kursor (ke depan) |
| `#` | Cari kata di bawah kursor (ke belakang) |

### Substitusi

```
:s/old/new/       " ganti pertama di baris
:s/old/new/g      " ganti semua di baris
:%s/old/new/g     " ganti semua di file
:%s/old/new/gc    " ganti semua, konfirmasi tiap satu
```

## Mode Visual

### Seleksi

| Command | Description |
|---------|-------------|
| `v` | Mulai seleksi karakter |
| `V` | Mulai seleksi baris |
| `Ctrl+v` | Mulai seleksi blok |
| `o` | Pindah ke ujung seleksi lainnya |
| `gv` | Pilih ulang seleksi visual terakhir |

### Aksi pada Seleksi

| Command | Description |
|---------|-------------|
| `d` | Hapus seleksi |
| `y` | Salin seleksi |
| `c` | Ubah seleksi |
| `>` | Indentasi seleksi |
| `<` | Kurangi indentasi seleksi |
| `~` | Toggle huruf besar/kecil |
| `U / u` | Huruf besar / kecil semua seleksi |

## Buffer dan Window

### Buffer

| Command | Description |
|---------|-------------|
| `:ls` | Daftar buffer yang terbuka |
| `:bn / :bp` | Buffer berikutnya / sebelumnya |
| `:b{n}` | Ke buffer n |
| `:bd` | Tutup buffer saat ini |
| `:e file` | Buka file di buffer baru |

### Window

| Command | Description |
|---------|-------------|
| `:sp file` | Bagi horizontal |
| `:vsp file` | Bagi vertikal |
| `Ctrl+w h/j/k/l` | Navigasi ke window |
| `Ctrl+w =` | Samakan ukuran window |
| `Ctrl+w q` | Tutup window |

### Tab

| Command | Description |
|---------|-------------|
| `:tabnew file` | Buka file di tab baru |
| `gt / gT` | Tab berikutnya / sebelumnya |
| `:tabclose` | Tutup tab saat ini |

## Register

### Menggunakan Register

| Command | Description |
|---------|-------------|
| `"ay` | Salin ke register a |
| `"ap` | Tempel dari register a |
| `"Ay` | Tambahkan salinan ke register a |
| `:reg` | Tampilkan semua register |

### Register Spesial

| Command | Description |
|---------|-------------|
| `""` | Tanpa nama (hapus/salin terakhir) |
| `"0` | Salinan terakhir |
| `"+` | Clipboard sistem |
| `"/"` | Pola pencarian terakhir |
| `".` | Teks yang disisipkan terakhir |
| `"_` | Lubang hitam (buang) |

## Macro

### Merekam dan Memutar

| Command | Description |
|---------|-------------|
| `q{a}` | Mulai rekam macro ke register a |
| `q` | Berhenti merekam |
| `@{a}` | Putar macro dari register a |
| `@@` | Putar ulang macro terakhir |
| `5@a` | Putar macro a 5 kali |

### Contoh Macro

```
qa        " mulai rekam ke a
I//       " sisipkan // di awal baris
Esc j     " kembali ke normal, turun satu baris
q         " berhenti merekam
10@a      " komentar 10 baris berikutnya
```

## Pengaturan

### Opsi Umum

```
:set number         " tampilkan nomor baris
:set relativenumber  " nomor baris relatif
:set tabstop=4      " lebar tab
:set expandtab      " spasi alih-alih tab
:set ignorecase     " pencarian tidak peka huruf
```

### Tampilan dan Perilaku

```
:set wrap / nowrap   " toggle pembungkusan baris
:set hlsearch        " sorot hasil pencarian
:set incsearch       " pencarian inkremental
:set cursorline      " sorot baris saat ini
:syntax on           " aktifkan penyorotan sintaks
```

## Operasi File

### Simpan dan Keluar

| Command | Description |
|---------|-------------|
| `:w` | Simpan |
| `:w file` | Simpan sebagai file |
| `:q` | Keluar (gagal jika belum disimpan) |
| `:q!` | Keluar tanpa menyimpan |
| `:wq / :x / ZZ` | Simpan dan keluar |
| `:wa` | Simpan semua buffer |
| `:qa` | Keluar dari semua buffer |

### Info File dan Eksternal

| Command | Description |
|---------|-------------|
| `Ctrl+g` | Tampilkan info file |
| `:!cmd` | Jalankan perintah shell |
| `:r !cmd` | Sisipkan output perintah |
| `:r file` | Sisipkan isi file |

## Objek Teks

### Objek Inner dan Around

| Command | Description |
|---------|-------------|
| `iw / aw` | Dalam / sekitar kata |
| `is / as` | Dalam / sekitar kalimat |
| `ip / ap` | Dalam / sekitar paragraf |
| `i" / a"` | Dalam / sekitar tanda kutip ganda |
| `i' / a'` | Dalam / sekitar tanda kutip tunggal |
| `i( / a(` | Dalam / sekitar tanda kurung |
| `i{ / a{` | Dalam / sekitar kurung kurawal |
| `it / at` | Dalam / sekitar tag HTML |

### Kombinasi Umum

```
ciw     " ubah kata dalam
di"     " hapus dalam tanda kutip
ya{     " salin sekitar kurung kurawal
vip     " pilih paragraf dalam
```

## Mark dan Lompatan

### Mark

| Command | Description |
|---------|-------------|
| `m{a}` | Set mark a di posisi kursor |
| `'a` | Lompat ke baris mark a |
| ``a` | Lompat ke posisi tepat mark a |
| `:marks` | Tampilkan semua mark |

### Daftar Lompatan

| Command | Description |
|---------|-------------|
| `Ctrl+o` | Lompat ke posisi sebelumnya |
| `Ctrl+i` | Lompat ke posisi berikutnya |
| `:jumps` | Tampilkan daftar lompatan |
| `''` | Lompat ke posisi lompatan terakhir |
