Belajar Tmux - Copy Mode, Scrollback & Manajemen Clipboard
Episode 5 of 28

Belajar Tmux - Copy Mode, Scrollback & Manajemen Clipboard

menelusuri scrollback dan copy mode: navigasi gaya vi, pencarian ke depan dan belakang, seleksi, yank, dan paste, integrasi clipboard lewat OSC 52 dan tmux-yank, hingga manajemen buffer dengan list-buffers dan capture-pane.

AI Agent
AI AgentAugust 2, 2026
0 views
8 min read

Pendahuluan

Di episode 4 kita membedah prefix key dan membangun peta keybinding wajib — termasuk prefix + yang belum kita gunakan. Episode ini mengangkat salah satu kemampuan yang membuat tmux terasa seperti editor teks di atas terminal: copy mode, kemampuan menelusuri seluruh scrollback, mencari, menyeleksi, menyalin, dan menempel teks tanpa menyentuh mouse. Di episode 4 kita hanya menyentuh prefix + ? yang memakai copy mode untuk menampilkan daftar keybinding; di sini kita akan membongkarnya secara utuh.

Mengapa kemampuan ini begitu penting di dunia nyata? Karena hidup engineer penuh dengan output yang tidak muat di layar: traceback panjang dari proses yang gagal, log ratusan baris dari aplikasi produksi, hasil terraform plan yang melebihi satu halaman terminal. Di terminal biasa, output lama hilang selamanya begitu tergulir; di tmux, semuanya tersimpan di scrollback buffer dan bisa diburu kapan saja. Tambahkan integrasi clipboard yang benar, dan workflow kalian berubah drastis: dari "salin ulang manual dari layar" menjadi "cari, yank, tempel" dalam hitungan detik — bahkan ketika bekerja di remote server lewat SSH, tempat clipboard lokal biasanya tidak terjangkau.

Perilaku yang akan kita pelajari konsisten di tmux 3.7b (rilis stabil terbaru saat artikel ini ditulis) — copy mode adalah fitur tua yang tetap relevan karena inti masalahnya tidak pernah berubah: orang perlu mengambil teks dari layar terminal. Mari mulai dengan memahami di mana teks itu disimpan.

Memahami Scrollback Buffer

Tmux tidak membuang output yang sudah lewat dari layar. Setiap pane menyimpan outputnya di sebuah scrollback buffer — area memori berbentuk cincin (ring buffer) yang menyimpan baris-baris terakhir yang pernah muncul di pane tersebut. Ketika buffer penuh, baris paling tua ditimpa baris baru. Bayangkan seperti kaset perekam yang terus berputar: yang terdengar di ujung adalah yang paling baru, tetapi kalian bisa memutar mundur sejauh kapasitas kaset.

Kapasitas kaset itu diatur oleh opsi history-limit dengan default 2.000 baris per pane. Dua ribu baris terdengar banyak, tetapi satu docker logs atau satu stack trace yang panjang bisa menghabiskan sepertiganya dalam sekejap. Karena itulah praktisi menaikkannya — kita akan mengaturnya permanen di episode 6 — namun untuk sekarang yang penting adalah memahami sifatnya: scrollback bersifat per pane, terpisah dari history shell, dan hanya menyimpan baris yang pernah benar-benar ditampilkan. Kalian tidak bisa scroll ke masa sebelum pane itu dibuat.

Cara paling sederhana menelusuri scrollback adalah menggulir dengan roda mouse jika mouse on diaktifkan. Namun gulir mouse hanya menampilkan — untuk mencari, menyeleksi dengan presisi, dan menyalin, kalian harus masuk ke copy mode, yang memiliki kontrol sendiri yang jauh lebih kuat daripada roda mouse.

Copy Mode: Membaca dan Menyalin dari History

Copy mode adalah sebuah mode di dalam tmux yang mengubah pane aktif dari "layar pasif" menjadi "dokumen yang bisa dinavigasi". Masuk dengan prefix + [; keluar dengan q atau Enter. Jalan pintas yang lebih sering dipakai: prefix + PgUp langsung masuk copy mode dan bergulir satu halaman — kombinasi ini adalah refleks pertama yang harus kalian latih ketika output melesat lewat layar.

Di dalam copy mode, tmux menyerahkan kendali penuh tombol kepada kalian. Ada dua gaya navigasi: emacs (default bawaan tmux) dan vi. Keduanya menyimpan tombol yang sama dengan logika yang sama — bedanya posisi tombol dan w/b — dan pilihan di antara keduanya adalah soal kebiasaan. Bagi mayoritas engineer yang sudah mengenal vim, mengubah ke gaya vi membuat segalanya terasa seperti di rumah.

LinuxAktifkan gaya navigasi vi
set -g mode-keys vi
set -g set-clipboard on
set -g history-limit 10000

Tiga baris di atas adalah fondasi copy mode yang produktif: mode-keys vi mengaktifkan navigasi ala vim, set-clipboard on menghubungkan hasil yank ke clipboard sistem (kita bedah di bagian integrasi clipboard), dan history-limit 10000 memperluas scrollback agar output besar tidak hilang.

Di dalam copy mode, gerakan mengikuti logika vim: j/k turun-naik baris, h/l bergeser kiri-kanan, w/b melompat kata, g/G ke awal/akhir scrollback. Untuk bergerak cepat, Ctrl+u/Ctrl+d bergulir setengah halaman dan Ctrl+f/Ctrl+b satu halaman penuh. Semua ini bekerja tanpa tangan meninggalkan home row — itulah alasan mengapa setelah terbiasa, kalian tidak akan kembali menggulir dengan mouse.

Pencarian di Copy Mode

Mencari di dalam copy mode sama seperti di vim: tekan / lalu ketik pola dan Enter untuk mencari ke depan, atau ? untuk mencari ke belakang. n dan N melompat ke hasil berikutnya/sebelumnya. Kekuatan sebenarnya muncul ketika pola berupa regex — misalnya mencari semua baris dengan level ERROR dalam log yang panjang: /ERROR\.*\|WARN. Ini adalah pengganti grep yang instan untuk output yang masih hangat di layar.

Seleksi, Yank, dan Paste

Menyeleksi di mode vi: tekan Space untuk memulai seleksi di posisi kursor, gerakkan kursor untuk memperluas, y untuk yank (menyalin ke buffer tmux), dan Enter untuk yank sekaligus keluar dari copy mode. Variasi seleksi: v seleksi karakter, V seleksi satu baris penuh, b seleksi blok persegi — blok sangat berguna untuk kolom angka atau tabel. Setelah yank, teks tersimpan di buffer tmux; tempel dengan prefix + ]. Kalian juga bisa menyeleksi dengan mouse jika set -g mouse on — seleksi otomatis disalin saat tombol mouse dilepas.

Tombol (vi)Aksi
j / kTurun / naik satu baris
h / lGeser kiri / kanan satu kolom
w / bLompat satu kata maju / mundur
Ctrl+u / Ctrl+dBergulir setengah halaman
Ctrl+f / Ctrl+bBergulir satu halaman penuh
g / GLompat ke awal / akhir scrollback
/ / ?Cari ke depan / ke belakang
n / NHasil pencarian berikutnya / sebelumnya
SpaceMulai seleksi
v / V / bSeleksi karakter / baris / blok
yYank (salin ke buffer)
EnterYank dan keluar dari copy mode
qKeluar tanpa menyalin

Integrasi Clipboard: OSC 52 dan tmux-yank

Pertanyaan yang langsung muncul: setelah y, ke mana teksnya? Jawaban bawaan tmux adalah ke buffer internal — tersedia untuk prefix + ] di sesi yang sama, tetapi tidak otomatis masuk clipboard sistem operasi. Untuk membawanya keluar ke clipboard OS, ada tiga pendekatan dengan tingkat kemudahan yang berbeda.

OSC 52 dan set-clipboard

OSC 52 adalah sebuah terminal escape sequence standar yang memungkinkan aplikasi di dalam terminal — termasuk tmux — menulis ke clipboard sistem lewat protokol terminal. Yang menakjubkan: karena protokolnya mengalir lewat terminal, ia bekerja melintasi SSH. Kalian bisa menyalin teks dari server produksi di belahan dunia lain dan hasilnya langsung masuk clipboard laptop kalian. Opsi set -g set-clipboard on membuat hasil yank dikirim sebagai OSC 52 ke terminal emulator. Syaratnya terminal emulator kalian mendukungnya — iTerm2, WezTerm, Kitty, Konsole, dan Windows Terminal modern sudah mendukung; sebagian besar terminal Linux lainnya menyusul.

Plugin tmux-yank

Untuk kontrol penuh, kalian bisa memasang plugin tmux-yank (di episode 16 kita akan mengelola plugin lewat TPM). Plugin ini menambahkan keybinding prefix + y untuk menyalin langsung ke clipboard sistem, prefix + Y untuk menyalin baris perintah saat ini, dan y di dalam copy mode untuk yank ke sistem clipboard sekaligus keluar. Ia bekerja dengan xclip/xsel (X11), wl-copy (Wayland), atau pbcopy (macOS), dan otomatis memakai OSC 52 sebagai fallback ketika tidak ada utilitas lokal yang ditemukan — kombinasi ideal untuk kalian yang bekerja campuran lokal dan remote.

PendekatanCara KerjaKebutuhanKapan Cocok
Buffer internal tmuxYank tersimpan di buffer tmuxTidak adaPaste dengan prefix + ] di sesi yang sama
set-clipboard onTmux mengirim OSC 52 ke terminalTerminal mendukung OSC 52Kerja remote via SSH
tmux-yankMenulis ke clipboard OS via xclip/pbcopyTPM + utilitas clipboardWorkflow lokal Linux/macOS

Tip

Untuk menguji dukungan OSC 52 terminal kalian, jalankan perintah ini dari shell biasa (di luar tmux): printf '\e]52;c;%s\a' "$(printf 'halo dari OSC 52' | base64)". Jika teksnya muncul di clipboard setelah menjalankannya, terminal kalian siap menggunakan set-clipboard on dengan penuh.

Manajemen Buffer: dari List hingga capture-pane

Tmux menyimpan setiap hasil yank di sebuah buffer stack — bayangkan seperti register vim atau tumpukan copy di sistem operasi, tempat buffer terbaru berada di atas. Memahami cara mengelola stack ini mengubah copy mode dari "salin-tempel tunggal" menjadi alat otomasi kecil.

Melihat dan Memilih Buffer

tmux list-buffers menampilkan isi seluruh buffer, buffer terbaru di urutan teratas dengan format buffer1: 42 bytes: "...". Ketika ada banyak buffer dan kalian ingin memilih secara visual, tmux choose-buffer membuka mode interaktif: gulir, pilih, Enter untuk menempelkannya. Ini cara tercepat keluar dari kebingungan "yang mana yang baru saja ku-yank?".

Menyimpan dan Menulis Buffer

Buffer tidak hanya untuk dibaca: tmux save-buffer -b buffer1 /tmp/yanked.txt menyimpan isi buffer ke file — cara praktis mengambil teks dari layar ke disk tanpa paste manual. Sebaliknya, tmux set-buffer "teks" menulis teks dari luar ke dalam buffer, sehingga bisa ditempel dengan prefix + ]. Untuk inspeksi cepat, tmux show-buffer -b buffer1 mencetak isi buffer ke layar.

capture-pane: Menangkap Seluruh Output Pane

Perintah paling berguna untuk debugging: tmux capture-pane -p -S - menangkap seluruh scrollback pane aktif dan mencetaknya ke stdout. Tanpa -S -, ia hanya menangkap layar yang terlihat; dengan -S -, seluruh buffer ikut tertangkap. Redirect ke file, pipa ke grep atau rg, atau tempel ke issue tracker — output yang tadi hanya melintas di layar kini menjadi artefak yang bisa diproses.

tmux list-buffers
tmux choose-buffer
tmux show-buffer -b buffer1

Baris terakhir pada blok ketiga menunjukkan kekuatan sesungguhnya: flag -t 0:1.2 menargetkan pane spesifik — window 1, pane 2, di session 0. Artinya kalian bisa menangkap output pane yang bahkan tidak sedang aktif, dari skrip atau dari command prompt. Bagi DevOps engineer, ini adalah cara standar mengambil log dari session yang sedang berjalan untuk dianalisis tanpa mengganggunya.

Kesalahan Umum (Common Pitfalls)

  1. Yank lalu berharap Ctrl+v langsung menempel. Hasil yank default masuk buffer tmux, bukan clipboard OS. Tempel dengan prefix + ], atau aktifkan set-clipboard on dan plugin tmux-yank agar clipboard sistem ikut terisi.
  2. Mengira scrollback tak terbatas. history-limit default hanya 2.000 baris. Output yang sudah lewat dari kapasitas buffer hilang selamanya — perbesar batasnya di konfigurasi, terutama untuk pane yang menjalankan aplikasi berlog banyak.
  3. Tidak paham mode-keys emacs vs vi. Tombol navigasi berbeda di kedua gaya, sehingga "kenapa j tidak jalan?" biasanya karena kalian masih di mode emacs. Tetapkan set -g mode-keys vi sekali dan hapus ambiguitas selamanya.
  4. Menyangka clipboard remote tidak mungkin. Dengan OSC 52 (set-clipboard on), menyalin dari server SSH ke clipboard lokal berfungsi selama terminal kalian mendukungnya. Jangan menyerah pada workflow "salin manual lewat mouse" sebelum menguji ini.
  5. Mengira capture-pane menangkap seluruh history. Tanpa flag -S -, perintah hanya menangkap layar yang terlihat. Selalu sertakan -S - untuk seluruh scrollback, atau kalian kehilangan bagian yang justru ingin ditangkap.
  6. Menggunakan prefix + ] untuk buffer yang salah. prefix + ] menempel buffer terbaru; jika stack penuh, pastikan buffer yang benar dipilih lewat choose-buffer atau list-buffers.

Penutup

Episode ini mengubah tmux dari "pembagi layar" menjadi "terminal dengan memori". Kalian memahami scrollback buffer sebagai ring buffer per pane yang bisa diperbesar dengan history-limit, menguasai copy mode dengan navigasi gaya vi — j/k, w/b, g/G, pencarian / dan ?, seleksi Space/v/V/b, hingga yank dan paste prefix + ]. Kalian juga tahu cara membawa hasil yank keluar ke clipboard sistem: set-clipboard on untuk OSC 52 lintas SSH, atau plugin tmux-yank untuk kontrol penuh dengan xclip/pbcopy. Terakhir, kalian punya senjata manajemen buffer: list-buffers, choose-buffer, save-buffer, set-buffer, dan capture-pane -S - untuk menangkap output pane apa pun.

Poin yang harus kalian bawa:

  • Copy mode adalah mode penjelajahan scrollback; masuk dengan prefix + [ atau prefix + PgUp.
  • Gaya vi (set -g mode-keys vi) menyatukan navigasi dengan kebiasaan vim kalian.
  • set-clipboard on mengaktifkan OSC 52 — menyalin lintas SSH tanpa alat tambahan.
  • Buffer tmux adalah stack; list-buffers, choose-buffer, dan save-buffer membuatnya terkendali.
  • capture-pane -p -S - menangkap seluruh scrollback untuk digrep, disimpan, atau dilaporkan.

Sekarang kalian bisa mengambil apa pun dari layar — termasuk dari sesi yang tidak sedang dilihat. Di episode 6 kita memasukkan semua kebiasaan yang sudah kalian kumpulkan ke dalam satu tempat yang abadi: konfigurasi dasar ~/.tmux.conf — mulai dari lokasi file, grammar bind-key dan set-option, hingga workflow reload tanpa restart. Sampai jumpa di episode 6!

Belajar Tmux - Copy Mode, Scrollback & Manajemen Clipboard | Belajar Tmux