Mengoptimalkan history Zsh: HISTSIZE, SAVEHIST, HISTFILE, shared history antar terminal, pencarian dengan fc dan Ctrl-R plus history-substring-search, lalu mempercepat navigasi dengan autocd, cdpath, pushd/popd/dirs, dan integrasi zoxide untuk smart cd

Setelah di episode 7 prompt dan line editor kalian sudah rapi, pada episode ini kita membahas dua hal yang menentukan kecepatan kerja harian: history dan navigasi. Kalian mungkin tidak sadar seberapa sering menekan panah atas dan mengetik cd — dua kebiasaan yang paling banyak membuang waktu di terminal.
Zsh punya sistem history yang jauh lebih baik dari bash: pencarian prefix saat panah atas (kita sudah ikat di episode 7), shared history lintas terminal, dan opsi penyimpanan yang fleksibel. Di sisi navigasi, kombinasi autocd, cdpath, pushd/popd, dan tools seperti zoxide akan membuat kalian berpindah direktori tanpa mengetik path lengkap.
Zsh menyimpan history dalam tiga variabel utama:
| Variabel | Fungsi | Nilai Umum |
|---|---|---|
HISTSIZE | Jumlah entri di memori sesi aktif | 10000 |
SAVEHIST | Jumlah entri yang disimpan ke file | 10000 |
HISTFILE | Path file history | ~/.zsh_history |
HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=10000HISTSIZE berapa banyak perintah yang bisa diingat di sesi saat ini; SAVEHIST berapa banyak yang ditulis ke HISTFILE saat shell keluar. Menyamakan keduanya adalah praktik umum agar tidak ada yang terpotong.
Fitur unggulan Zsh: shared history — perintah dari satu terminal langsung tersedia di terminal lain secara real-time. Dua opsi yang relevan:
setopt SHARE_HISTORY # share + append antar sesi
setopt INC_APPEND_HISTORY # tulis ke file setiap perintahDengan SHARE_HISTORY, setiap perintah yang selesai langsung ditambahkan ke history file, dan sesi lain membaca perubahan itu. Ini membuat muscle memory kalian konsisten di semua terminal. Dua opsi pelengkap yang sangat berguna:
setopt HIST_IGNORE_DUPS # buang duplikat berurutan
setopt HIST_IGNORE_SPACE # perintah berawalan spasi tidak disimpan
setopt HIST_REDUCE_BLANKS # rapikan spasi berlebih sebelum simpanHIST_IGNORE_SPACE berguna untuk perintah sensitif — mulai dengan spasi dan perintah itu tidak masuk history.
history dan fc adalah dua cara melihat isi history:
history
history 20 # 20 entri terakhir
fc -l 100 # mulai dari entri ke-100
fc -l -10 # 10 entri terakhir (bash-style)fc lebih fleksibel: fc -l mencetak, fc -e mengedit perintah dengan editor, dan fc -s menjalankan ulang:
!! # jalankan ulang perintah terakhir
!42 # jalankan ulang entri ke-42
!git # jalankan ulang perintah git terakhir
fc -s git push # jalankan ulang perintah git terakhir dengan "push"Ctrl-R bawaan Zsh melakukan incremental search mundur. Tapi ada peningkatan populer: zsh-history-substring-search, yang membuat Ctrl-R (dan Ctrl-P) mencari substring di posisi mana pun, bukan hanya prefix.
autoload -Uz history-substring-search
bindkey '^R' history-substring-search-up
bindkey '^S' history-substring-search-downPaket ini juga tersedia sebagai plugin di Oh My Zsh / zinit (episode 12-13). Hasilnya: ketik kubectl, tekan Ctrl-R, dan semua perintah kubectl dari semua terminal muncul.
Dengan setopt autocd, kalian tidak perlu mengetik cd:
setopt autocd~/projects # otomatis cd ke ~/projects
/var/log # otomatis cd ke /var/logMengetik nama direktori yang ada di PATH juga jalan — misalnya foo jika direktori itu executable path. autocd plus ~ dan variable expansion membuat navigasi jadi sangat ringkas.
cdpath adalah daftar direktori yang Zsh cari saat cd dengan path relatif tidak ketemu di direktori saat ini:
cdpath=(~ ~/projects ~/dev ~/Documents)cd devvnull # dari mana pun, mencari di ~/projects/devvnull dllIngat konsep tied array di episode 4? cdpath adalah pasangan dari variabel skalar CDPATH — mengubah salah satu mengubah yang lain.
Beralih bolak-balik antara dua direktori lebih cepat dengan stack:
pushd /var/log # pindah + simpan direktori sebelumnya
popd # kembali ke direktori sebelumnya
dirs # tampilkan isi stack
pushd +1 # lompat ke entri ke-1 di stackUntuk sekadar bolak-balik dua direktori, cd - (atau cd - dengan angka) juga bekerja seperti di bash.
zoxide adalah tool modern yang menggantikan cd dengan "jump": ia mempelajari direktori yang sering kalian kunjungi lalu membawa kalian ke sana hanya dengan sebagian nama.
sudo apt install zoxide # Debian/Ubuntu
brew install zoxide # macOS
curl -sSfL https://raw.githubusercontent.com/ajeetdsouza/zoxide/main/install.sh | sheval "$(zoxide init zsh)" # menambahkan perintah `z`z devvnull # jump ke direktori yang paling sering dikunjungi berisi "devvnull"
z ..- # kembali ke direktori sebelumnya
zi # interaktif dengan fzf (episode 13)Tip
zoxide init zsh otomatis meng-hook cd untuk mencatat kunjungan dan mendukung completion. Kalau kalian lebih suka tidak mengubah cd bawaan, gunakan zoxide init --cmd cd zsh dan biarkan perintah z tetap terpisah.
Sebelum zoxide populer, ada fasd — tool dengan filosofi sama (frekuensi + recency). Karena zoxide lebih aktif dan cepat, series ini fokus ke zoxide; fasd tetap disebut sebagai alternatif historis.
SAVEHIST lebih kecil dari HISTSIZE, sebagian history hilang saat keluar; samakan keduanya.HIST_IGNORE_DUPS, history penuh duplikat yang membuat Ctrl-R berisik.HISTFILE tidak ada di skrip — shell non-interaktif tidak menulis history; ini normal (desain, bukan bug).z --clean membersihkan entri yang tidak lagi ada.Inti yang harus dibawa pulang:
HISTSIZE=SAVEHIST=10000 dan HISTFILE=~/.zsh_history; aktifkan SHARE_HISTORY.fc/history untuk melihat, !!/!n untuk menjalankan ulang.Ctrl-R + history-substring-search membuat pencarian history jadi cepat dan akurat.autocd, cdpath, pushd/popd, dan zoxide untuk smart jump.Di episode 9 selanjutnya kita akan membahas konfigurasi .zshrc (best practice) — struktur modular yang terorganisir, pengaturan setopt yang benar (autocd, extendedglob, histignoredups, noclobber, sharehistory), dan urutan sourcing yang tepat agar startup bersih dan mudah dirawat. Sampai jumpa di episode 9!