Belajar Zsh - History & Navigation
Episode 8 of 23

Belajar Zsh - History & Navigation

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

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

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.

Memahami Variabel History

Zsh menyimpan history dalam tiga variabel utama:

VariabelFungsiNilai Umum
HISTSIZEJumlah entri di memori sesi aktif10000
SAVEHISTJumlah entri yang disimpan ke file10000
HISTFILEPath file history~/.zsh_history
Set history di .zshrc
HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=10000

HISTSIZE 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.

Shared History: Satu History untuk Semua Terminal

Fitur unggulan Zsh: shared history — perintah dari satu terminal langsung tersedia di terminal lain secara real-time. Dua opsi yang relevan:

Shared history
setopt SHARE_HISTORY        # share + append antar sesi
setopt INC_APPEND_HISTORY   # tulis ke file setiap perintah

Dengan 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:

History hygiene
setopt HIST_IGNORE_DUPS        # buang duplikat berurutan
setopt HIST_IGNORE_SPACE       # perintah berawalan spasi tidak disimpan
setopt HIST_REDUCE_BLANKS      # rapikan spasi berlebih sebelum simpan

HIST_IGNORE_SPACE berguna untuk perintah sensitif — mulai dengan spasi dan perintah itu tidak masuk history.

Pencarian History

fc dan history

history dan fc adalah dua cara melihat isi history:

Melihat 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:

Menjalankan ulang perintah
!!                  # 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.

Set history substring search
autoload -Uz history-substring-search
bindkey '^R' history-substring-search-up
bindkey '^S' history-substring-search-down

Paket 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.

autocd: Ketik Path Langsung

Dengan setopt autocd, kalian tidak perlu mengetik cd:

Aktifkan autocd
setopt autocd
Contoh autocd
~/projects        # otomatis cd ke ~/projects
/var/log          # otomatis cd ke /var/log

Mengetik 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: Daftar Direktori Pencarian

cdpath adalah daftar direktori yang Zsh cari saat cd dengan path relatif tidak ketemu di direktori saat ini:

Set cdpath
cdpath=(~ ~/projects ~/dev ~/Documents)
Contoh cdpath
cd devvnull        # dari mana pun, mencari di ~/projects/devvnull dll

Ingat konsep tied array di episode 4? cdpath adalah pasangan dari variabel skalar CDPATH — mengubah salah satu mengubah yang lain.

pushd/popd/dirs: Stack Direktori

Beralih bolak-balik antara dua direktori lebih cepat dengan stack:

Stack direktori
pushd /var/log     # pindah + simpan direktori sebelumnya
popd               # kembali ke direktori sebelumnya
dirs               # tampilkan isi stack
pushd +1           # lompat ke entri ke-1 di stack

Untuk sekadar bolak-balik dua direktori, cd - (atau cd - dengan angka) juga bekerja seperti di bash.

zoxide: Smart cd Berdasarkan Frekuensi

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.

Install zoxide
sudo apt install zoxide       # Debian/Ubuntu
brew install zoxide           # macOS
curl -sSfL https://raw.githubusercontent.com/ajeetdsouza/zoxide/main/install.sh | sh
Integrasi zoxide di .zshrc
eval "$(zoxide init zsh)"     # menambahkan perintah `z`
Contoh zoxide
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.

fasd (Opsional)

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.

Common Pitfalls

  • History terpotong — jika SAVEHIST lebih kecil dari HISTSIZE, sebagian history hilang saat keluar; samakan keduanya.
  • Duplicate history — tanpa 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).
  • zoxide menumpuk direktori yang sudah dihapusz --clean membersihkan entri yang tidak lagi ada.

Penutup

Inti yang harus dibawa pulang:

  • Set HISTSIZE=SAVEHIST=10000 dan HISTFILE=~/.zsh_history; aktifkan SHARE_HISTORY.
  • Gunakan fc/history untuk melihat, !!/!n untuk menjalankan ulang.
  • Ctrl-R + history-substring-search membuat pencarian history jadi cepat dan akurat.
  • Navigasi: 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!

Belajar Zsh - History & Navigation | Belajar Zsh