# Referensi Cepat tmux

*Session, window, pane, copy mode, konfigurasi*

> Source: tmux Documentation (github.com/tmux/tmux) · MIT

## Manajemen Session

### Membuat dan Menghubungkan

```
tmux                        # session baru
tmux new -s work            # session baru dengan nama
tmux attach -t work         # hubungkan ke session
tmux attach -dt work        # lepaskan yang lain, hubungkan
```

### Perintah Session

| Command | Description |
|---------|-------------|
| `tmux ls` | Tampilkan semua session |
| `tmux kill-session -t work` | Hapus session berdasarkan nama |
| `tmux kill-server` | Matikan server tmux dan semua session |
| `tmux rename-session -t old new` | Ganti nama session |
| `Prefix d` | Lepaskan dari session saat ini |
| `Prefix $` | Ganti nama session saat ini |
| `Prefix s` | Daftar session (interaktif) |

*Prefix default adalah Ctrl-b*

## Window

### Pintasan Keyboard Window

| Command | Description |
|---------|-------------|
| `Prefix c` | Buat window baru |
| `Prefix ,` | Ganti nama window saat ini |
| `Prefix &` | Tutup window saat ini (dengan konfirmasi) |
| `Prefix n` | Window berikutnya |
| `Prefix p` | Window sebelumnya |
| `Prefix 0-9` | Pindah ke window berdasarkan nomor |
| `Prefix w` | Daftar window (pemilih interaktif) |
| `Prefix l` | Beralih ke window aktif terakhir |

### Perintah Window

```
tmux new-window -t work     # window baru di session
tmux swap-window -t 0       # pindahkan window ke indeks 0
tmux move-window -t 3       # ubah nomor menjadi indeks 3
```

## Pane

### Membagi dan Menutup

| Command | Description |
|---------|-------------|
| `Prefix %` | Bagi horizontal (kiri \| kanan) |
| `Prefix "` | Bagi vertikal (atas / bawah) |
| `Prefix x` | Tutup pane saat ini (dengan konfirmasi) |
| `Prefix !` | Jadikan pane sebagai window tersendiri |
| `Prefix z` | Toggle zoom pane (layar penuh) |

### Mengubah Ukuran Pane

| Command | Description |
|---------|-------------|
| `Prefix Ctrl-Arrow` | Ubah ukuran 1 sel |
| `Prefix Alt-Arrow` | Ubah ukuran 5 sel |
| `Prefix Space` | Ganti layout secara berurutan |

*Layout: even-horizontal, even-vertical, main-horizontal, main-vertical, tiled*

## Navigasi

### Berpindah Antar Pane

| Command | Description |
|---------|-------------|
| `Prefix Arrow` | Pindah ke pane sesuai arah |
| `Prefix o` | Siklus ke pane berikutnya |
| `Prefix q` | Tampilkan nomor pane, tekan nomor untuk berpindah |
| `Prefix {` | Tukar pane dengan sebelumnya |
| `Prefix }` | Tukar pane dengan berikutnya |

### Berpindah Antar Session

| Command | Description |
|---------|-------------|
| `Prefix (` | Pindah ke session sebelumnya |
| `Prefix )` | Pindah ke session berikutnya |
| `Prefix s` | Pemilih session (tampilan pohon) |
| `Prefix w` | Pemilih window di semua session |

## Copy Mode

### Masuk dan Navigasi

| Command | Description |
|---------|-------------|
| `Prefix [` | Masuk copy mode |
| `q` | Keluar copy mode |
| `Arrow / hjkl` | Pindah kursor (mode vi) |
| `Ctrl-u / Ctrl-d` | Gulir halaman atas / bawah |
| `g / G` | Lompat ke atas / bawah |
| `/` | Cari ke depan |
| `?` | Cari ke belakang |
| `n / N` | Hasil cari berikutnya / sebelumnya |

### Memilih dan Menyalin

| Command | Description |
|---------|-------------|
| `Space` | Mulai seleksi (mode vi) |
| `Enter` | Salin seleksi dan keluar |
| `Prefix ]` | Tempel buffer |
| `v` | Toggle seleksi persegi panjang (mode vi) |

*Aktifkan mode vi: set -g mode-keys vi*

## Konfigurasi

### Pengaturan Umum (~/.tmux.conf)

```
set -g mouse on                 # aktifkan mouse
set -g base-index 1             # window mulai dari 1
set -g renumber-windows on      # penomoran ulang saat ditutup
set -g default-terminal "tmux-256color"
set -g history-limit 50000
```

### Muat Ulang Konfigurasi

```
tmux source-file ~/.tmux.conf   # dari shell
# atau Prefix : lalu ketik:
source-file ~/.tmux.conf
```

## Status Bar

### Opsi Status Bar

```
set -g status-position top
set -g status-style "bg=black,fg=white"
set -g status-left "[#S] "
set -g status-right "%H:%M %d-%b"
set -g status-interval 5
```

### Variabel Format

| Command | Description |
|---------|-------------|
| `#S` | Nama session |
| `#I` | Indeks window |
| `#W` | Nama window |
| `#P` | Indeks pane |
| `#H` | Nama host |
| `#T` | Judul pane |

## Pintasan Keyboard

### Binding Kustom

```
# ganti prefix ke Ctrl-a
unbind C-b
set -g prefix C-a
bind C-a send-prefix
# navigasi pane gaya vim
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
```

### Sintaks Binding

| Command | Description |
|---------|-------------|
| `bind X command` | Ikat Prefix + X ke perintah |
| `bind -n M-Left prev` | Ikat tanpa prefix (Alt-Left) |
| `bind -r H resize-pane -L 5` | Binding yang bisa diulang |
| `unbind X` | Hapus binding |
| `Prefix ?` | Tampilkan semua binding tombol saat ini |

## Skrip

### Layout Terskrip

```
tmux new-session -d -s dev
tmux send-keys -t dev "vim" Enter
tmux split-window -h -t dev
tmux send-keys -t dev "npm run dev" Enter
tmux attach -t dev
```

### Perintah Berguna

| Command | Description |
|---------|-------------|
| `tmux send-keys -t sess 'cmd' Enter` | Kirim penekanan tombol ke session |
| `tmux capture-pane -p` | Cetak isi pane ke stdout |
| `tmux display-message '#S'` | Tampilkan pesan / variabel |
| `tmux set-environment -g VAR val` | Set variabel lingkungan |
| `tmux list-keys` | Tampilkan semua binding tombol |

## Pola Umum

### Rekomendasi ~/.tmux.conf

```
set -g mouse on
set -g base-index 1
set -g mode-keys vi
set -g status-position top
set -g history-limit 50000
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
```

### Resep Cepat

| Command | Description |
|---------|-------------|
| `Bertahan dari putusnya SSH` | `tmux new -s work` → putus → `tmux attach -t work` |
| `Berbagi session` | Kedua user `tmux attach -t sama` (hanya baca: `-r`) |
| `Simpan scrollback` | `tmux capture-pane -S -3000 -p > log.txt` |
| `Hapus pane macet` | Prefix x, atau `tmux kill-pane -t %N` |
| `Susun ulang window` | `:swap-window -s 3 -t 1` |
