Belajar Tmux - Options & Environment Management
Series/Belajar Tmux/Episode 12
Episode 12 of 28

Belajar Tmux - Options & Environment Management

Membedah sistem options tmux: empat tingkatan scope (server, session, window, pane), options penting seperti history-limit dan escape-time, serta pengelolaan environment dan working directory yang konsisten.

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

Pendahuluan

Di episode 11 sebelumnya kita membahas keybinding — cara memetakan perintah ke kombinasi tombol dengan bind-key dan unbind-key sehingga aksi yang paling sering dipakai bisa diakses dalam satu ketukan. Namun tombol hanyalah pintu masuk; yang menentukan perilaku di balik pintu itu adalah options. Pada episode ini kita membedah sistem options tmux secara menyeluruh: empat tingkatan scope, cara membaca dan mengubahnya, options penting yang wajib kalian setel, serta pengelolaan environment dan working directory yang sering diabaikan padahal sangat menentukan konsistensi workflow.

Di dunia nyata, options adalah pembeda antara tmux yang sekadar "jalan" dan tmux yang "terasa enak". Dua orang bisa memakai tmux 3.7b yang sama persis, tetapi pengalamannya berbeda total hanya karena satu menyetel history-limit dan mouse on sedangkan yang lain tidak. Options juga menjadi bahasa komunikasi antar engineer: ketika rekan kerja bilang "set aggressive-resize on", kalian harus langsung memahami efeknya di mesin kalian.

Options: Kenop Perilaku, Bukan Perintah

Pembeda pertama yang harus kalian internalisasi: perintah (command) adalah aksi, options adalah keadaan. new-window adalah perintah — ia melakukan sesuatu seketika. history-limit 10000 adalah option — ia mengubah cara tmux berperilaku selama server hidup. Perintah dieksekusi sekali; options bertahan dan memengaruhi seluruh operasi sesudahnya.

Analogi yang pas adalah kabin mobil. Ada tombol yang bereaksi langsung saat ditekan (perintah), dan ada saklar yang mengubah pengaturan dasar kendaraan — posisi kursi, sensitivitas pedal, kecerahan panel (options). Saklar tidak menghasilkan aksi sesaat, tetapi setiap aksi berikutnya mengikuti pengaturan itu. Di tmux, kalian bisa membuat window baru kapan saja, tetapi apakah window itu membawa history 2000 baris atau 10000 baris ditentukan oleh option history-limit yang disetel jauh sebelumnya.

Empat Tingkatan Scope Options

Tmux membagi options ke dalam empat tingkatan berdasarkan lingkup pengaruhnya. Memahami tingkatan ini adalah kunci, karena dua options bisa punya nama mirip tetapi perilaku berbeda tergantung di tingkat mana ia disetel — misalnya base-index di tingkat session mengatur penomoran window, sedangkan pane-base-index di tingkat window mengatur penomoran pane.

TingkatanLingkupMelihatMengubah
ServerSeluruh server, semua sessiontmux show-options -stmux set-option -s
SessionSatu session, atau semua (-g)tmux show-options -gtmux set-option -g
WindowSatu window, atau semua (-g)tmux show-window-optionstmux set-window-option -g
PaneSatu pane, atau semua (-g)tmux show-options -ptmux set-option -p

Aturan praktisnya: jika kalian hanya ingat satu hal, ingat bahwa option yang disetel di tingkat yang lebih spesifik menimpa nilai global — persis seperti variabel di dalam scope function yang menimpa variabel global. Saat debugging, kalian tidak boleh hanya melihat nilai global; kalian harus memeriksa nilai per-session, per-window, dan per-pane untuk target yang bermasalah.

Membaca Options: show-options dan show-window-options

Perintah untuk membaca options adalah show-options (dengan flag scope) dan alias show-window-options untuk tingkat window. Tanpa argumen, keduanya mencetak semua options beserta nilainya; dengan nama option, hanya option tersebut yang dicetak.

Tampilkan semua options
tmux show-options -g

Dari dalam tmux, pemanggilan yang sama bisa dilakukan lewat command prompt dengan prefix + : lalu mengetik perintah tanpa awalan tmux. Berikut varian scope yang paling sering dipakai:

Varian show-options
tmux show-options -s history-limit
tmux show-options -g mouse
tmux show-window-options -g aggressive-resize
tmux show-options -gp remain-on-exit

Perhatikan bentuk output khas perintah ini: satu baris berisi option value, dengan nilai kosong untuk boolean yang off dan nilai ber-tanda kutip untuk option yang mengandung spasi. Format yang rapi ini bukan kebetulan — di episode 14 kita akan memakai show-options sebagai sumber data untuk scripting.

Mengubah Options: set-option dan set-window-option

Flag -g untuk Global, Flag -t untuk Target

Untuk mengubah options, pakai set-option (alias set) dan set-window-option (alias setw). Bendera -g menyetel nilai global sehingga berlaku untuk semua session, window, atau pane sekarang dan yang akan datang. Tanpa -g, perubahan hanya berlaku pada target tertentu lewat -t.

Set global vs per-target
set -g history-limit 10000
set -t dev status off
setw -g aggressive-resize on
setw -g pane-base-index 1

Baris pertama menyetel kapasitas history untuk seluruh server, baris kedua mematikan status bar hanya untuk session dev, baris ketiga mengubah perilaku resize semua window, dan baris keempat mengubah penomoran pane di semua window. Pola set -g dan setw -g adalah yang paling sering muncul di ~/.tmux.conf, karena file konfigurasi memang dimaksudkan untuk menetapkan nilai global sejak server dimulai.

Note

Sebagian options hanya berlaku untuk entity yang baru dibuat. history-limit misalnya tidak mengubah kapasitas history pane yang sudah ada — ia hanya berlaku untuk pane yang dibuat setelahnya. Jika perubahan tidak terlihat, ada dua kemungkinan: config belum di-reload, atau option memang hanya memengaruhi object baru.

Options Penting yang Harus Kalian Setel

history-limit: Kapasitas Scrollback

Default tmux menyimpan 2000 baris history per pane — sering terlalu sedikit untuk membaca log migrasi atau output build yang panjang. Nilai yang umum dipakai komunitas berkisar 10000 hingga 50000. Karena option ini server-wide dan hanya berlaku untuk pane baru, setel sedini mungkin di ~/.tmux.conf.

Set history-limit
set -g history-limit 10000

mouse: Pointer Berperilaku Sesuai Harapan

Dengan mouse on, kalian bisa scroll history, memilih pane dengan klik, resize border dengan drag, dan memilih teks dalam copy mode. Banyak engineer mematikannya di editor tertentu, tetapi sebagai default global, mouse on adalah keputusan paling banyak diambil di tim-tim produksi karena memangkas kurva belajar anggota baru.

aggressive-resize: Hemat Ruang di Client Kecil

Defaultnya, tmux me-resize window agar pas dengan client yang paling besar. aggressive-resize on membuat window me-resize mengikuti client yang sedang aktif — penting ketika satu window dibuka di banyak session dengan ukuran terminal yang berbeda. Trade-off-nya jelas: full-screen program seperti vim dan htop menyambutnya, tetapi program interaktif yang lambat merespon sinyal SIGWINCH akan terasa kasar.

default-terminal: Warna dan Karakter Kunci

default-terminal menentukan terminal emulation yang dipakai program di dalam pane. Nilai tmux-256color (default di tmux 3.7b) sudah mendukung 256 warna; kalian bisa mengujinya dengan membandingkan output tput colors di dalam dan di luar tmux. Pastikan terminal luar juga menyetel TERM yang sesuai — kalau tidak, warna akan tampak rusak atau tidak muncul sama sekali.

escape-time: Latensi Pembacaan Escape Sequence

escape-time adalah berapa milidetik tmux menunggu untuk membedakan satu penekanan Esc dari awal urutan escape sequence seperti tombol panah. Default 500 ms membuat Esc di editor seperti Vim terasa berat — tekan lalu tunggu sepersekian detik sebelum mode berubah. Menurunkan ke 10 membuat respon Vim terasa seketika.

Escape time responsif
set -g escape-time 10

base-index dan status

base-index mengubah penomoran window dari 0 menjadi 1 — preferensi mayoritas pengguna. status on mengaktifkan status bar, yang nanti kita sulap menjadi pusat informasi workspace saat membahas format strings di episode lanjutan.

base-index dan status
set -g base-index 1
set -g status on

Environment dan Working Directory

Selain options, tmux menyimpan environment variables untuk setiap session. Environment ini adalah snapshot variabel yang dibawa client saat attach, dan justru inilah yang membuat pengalaman berbeda ketika kalian membuka session dari mesin yang berbeda-beda.

set-environment dan update-environment

Environment session dikelola dengan set-environment (alias setenv). Contoh paling praktis: memastikan EDITOR atau token internal tersedia di semua pane session itu.

Set environment session
set-environment -g EDITOR nvim
set-environment -g MY_APP_ENV staging
show-environment

Bendera -g membuat variabel menjadi global sehingga diwarisi session-session baru. Kebalikannya, update-environment adalah daftar variabel yang disinkronkan dari client setiap kali kalian attach — defaultnya mencakup DISPLAY, SSH_AUTH_SOCK, SSH_CONNECTION, dan sejenisnya. Inilah alasan SSH agent forwarding tetap bekerja di dalam tmux meski client berpindah-pindah: tmux menimpa nilai variabel tersebut dari client yang baru attach.

Manajemen Working Directory

Working directory adalah "alamat rumah" setiap pane. Defaultnya, new-session dan new-window memakai working directory client saat perintah dijalankan. Untuk menegakkan lokasi tertentu — misalnya saat script otomasi membuat session — pakai flag -c:

Tentukan working directory
tmux new-session -d -s api -c /srv/api
tmux new-window -t api -n worker -c /srv/api/worker
tmux send-keys -t api:0 'pwd' Enter

Di session api, setiap pane tahu persis berada di direktori proyeknya masing-masing. Inilah yang membuat session tmux lebih unggul daripada sekadar terminal yang dibuka manual: lokasi, environment, dan layout dikemas menjadi satu artefak yang bisa dibuka ulang.

Propagasi Environment ke Session Baru

Satu detail yang sering membingungkan: session baru yang dibuat dari dalam tmux mewarisi environment session saat itu, sedangkan session yang dibuat dari luar memakai environment shell luar. Dengan set-environment -g, kalian menjamin variabel tertentu selalu ada di semua session tanpa bergantung pada asal pembuatannya.

Propagasi env ke session baru
set-environment -g DEPLOY_TARGET prod

Kombinasi set-environment -g dan update-environment adalah dua arah yang saling melengkapi: yang pertama memaksakan nilai global, yang kedua menyinkronkan nilai "hidup" milik client. Memahami keduanya akan menyelamatkan kalian dari kebingungan klasik "kenapa env-nya beda di session itu?".

Konfigurasi Options yang Siap Dipakai

Berikut kumpulan options yang menjadi titik awal sehat untuk hampir semua pengguna tmux 3.7b:

~/.tmux.conf — options kunci
set -g history-limit 10000
set -g escape-time 10
set -g default-terminal "tmux-256color"
set -g mouse on
set -g base-index 1
setw -g pane-base-index 1
setw -g aggressive-resize on
set -g status on

Reload dengan tmux source-file ~/.tmux.conf atau prefix + r jika kalian sudah mengikat reload di episode 11, lalu uji satu per satu. Jangan menyalin mentah — setiap baris punya trade-off, dan bagian Kesalahan Umum di bawah ini menjelaskan jebakan yang paling sering muncul.

Kesalahan Umum (Common Pitfalls)

  1. Menyetel option per-target dengan -t lalu heran tidak berlaku global. set -t dev status off hanya memengaruhi session dev. Jika maksudnya semua session, gunakan set -g.
  2. Menurunkan escape-time tapi program dalam pane tetap lambat. escape-time bukan satu-satunya sumber latensi — aplikasi seperti Neovim punya ttimeoutlen sendiri. Setel keduanya bersama untuk hasil terbaik.
  3. Mengharap history-limit mengubah pane yang sudah ada. Option ini hanya berlaku untuk pane baru. Setelah mengubahnya, buat window baru untuk menguji, jangan scroll window lama.
  4. Menimpa update-environment tanpa menyertakan nilai default. List ini adalah pengganti total, bukan tambahan. Jika kalian menulis set -g update-environment FOO, variabel DISPLAY dan SSH_AUTH_SOCK berhenti disinkronkan — kecuali memang itu tujuannya.
  5. Mengatur default-terminal tanpa menyesuaikan terminal luar. Nilai di dalam dan di luar tmux harus konsisten; mismatched TERM menghasilkan warna rusak atau karakter aneh di editor.
  6. Lupa reload config setelah mengubah options. Config dibaca sekali saat server pertama dibuat. Selalu jalankan tmux source-file ~/.tmux.conf setelah edit, dan jadikan ini kebiasaan sebelum menyalahkan option.

Penutup

Episode ini memberi kalian kendali penuh atas perilaku tmux: empat tingkatan scope options, pembacaan dengan show-options/show-window-options, perubahan dengan set-option/set-window-option, serta options kunci seperti history-limit, mouse, aggressive-resize, default-terminal, escape-time, base-index, dan status. Kalian juga kini mengelola environment via set-environment dan update-environment, serta mengendalikan working directory setiap pane dengan flag -c.

Poin yang harus kalian bawa:

  • Options adalah keadaan yang bertahan; perintah adalah aksi yang sesaat.
  • Scope berjenjang: server, session, window, pane — yang spesifik menimpa yang global.
  • set -g/setw -g adalah default di config; -t untuk target spesifik.
  • update-environment menjaga variabel client tetap hidup; set-environment -g memaksakan nilai global.

Semua pengaturan ini masih bisa hilang begitu server dimatikan — yang membawa kita ke masalah berikutnya: mempertahankan session beserta seluruh state-nya. Di episode 13 selanjutnya kita akan membahas persistence, session restore, dan data management — menghidupkan kembali session setelah reboot dengan tmux-resurrect dan tmux-continuum, menyimpan scrollback dengan capture-pane, serta logging window dengan pipe-pane. Sampai jumpa di episode 13!

Belajar Tmux - Options & Environment Management | Belajar Tmux