Membangun perpustakaan alias dan fungsi Zsh: simple alias, global alias yang bisa muncul di tengah perintah, suffix alias yang bereaksi pada ekstensi file, shortcut git dengan satu huruf, lalu fungsi dengan $0, $@, $#, sistem autoload, dan struktur fpath untuk memuat fungsi on-demand

Setelah di episode 9 .zshrc kalian sudah terstruktur rapi, pada episode ini kita mengisi "senjata" harian: alias dan functions. Ini adalah cara utama kalian mempercepat interaksi dengan terminal — dan Zsh membawa konsep alias jauh melampaui bash dengan global alias dan suffix alias.
Mengapa mempelajari keduanya secara serius? Karena di dunia nyata, workflow yang cepat dibangun dari kombinasi: alias untuk singkatan, fungsi untuk logika yang lebih kompleks. Bash tidak punya global/suffix alias, dan fungsi Zsh punya sistem autoload yang membuatnya ringan. Kuasai lapisan ini dan prompt kalian akan berubah dari "mengetik perintah" menjadi "memerintahkan alat".
Alias dasar mengganti nama perintah:
alias ll='ls -l'
alias la='ls -la'
alias gs='git status'
alias gd='git diff'
alias dc='docker compose'
alias k='kubectl'Alias hanya bekerja pada awal perintah — echo gs tidak akan mengekspansi gs. Ini perbedaan fundamental dari global alias.
Global alias (dibuat dengan alias -g) diekspansi di posisi mana pun dalam perintah. Ini fitur khas Zsh yang tidak ada di bash:
alias -g G='| grep'
alias -g L='| less'
alias -g C='| wc -l'
alias -g H='| head'
alias -g NULL='>/dev/null 2>&1'ps aux G ssh # ps aux | grep ssh
ls -la L # ls -la | less
curl -s example.com C # curl -s example.com | wc -l
./deploy.sh NULL # output dibuangWarning
Global alias bisa membingungkan saat kalian benar-benar ingin menulis huruf G atau L dalam perintah. Batasi penggunaannya pada simbol yang tidak ambigu (seperti G, L, NULL) dan dokumentasikan di ~/.zsh/aliases.zsh agar tim juga paham.
Suffix alias (alias -s) memicu perintah berdasarkan ekstensi file. Mengetik nama file dan menekan Enter akan menjalankan handler-nya:
alias -s md=nvim
alias -s txt=$EDITOR
alias -s json=nvim
alias -s log=less
alias -s py=python3README.md # membuka nvim README.md
app.log # membuka app.log dengan less
script.py # menjalankan script.py dengan python3Ini menghemat pengetikan perintah yang berulang. Suffix alias bekerja bahkan tanpa mengetik path lengkap jika file ada di direktori aktif.
Praktik populer dari komunitas: shortcut git satu huruf.
alias g='git'
alias ga='git add'
alias gc='git commit'
alias gp='git push'
alias gl='git pull'
alias gst='git status'
alias gd='git diff'
alias gco='git checkout'
alias gb='git branch'
alias glog='git log --oneline --graph --decorate'Ini style yang dipakai banyak framework (Oh My Zsh punya plugin git dengan g-prefix yang lebih lengkap). Fungsinya sama — temukan kombinasi yang paling hemat jari untuk workflow kalian.
Saat logika melebihi satu perintah, gunakan function. Deklarasi dasar:
mydir() {
mkdir -p "$1"
cd "$1"
}
# atau dengan kata kunci function
function mydir() {
mkdir -p "$1"
cd "$1"
}Di dalam function, parameter khusus:
| Variabel | Isi |
|---|---|
$0 | Nama function (atau skrip) |
$1, $2, ... | Argumen posisional |
$@ | Semua argumen sebagai daftar |
$# | Jumlah argumen |
$* | Semua argumen sebagai satu string |
sum() {
local total=0
for n in "$@"; do
(( total += n ))
done
print "Jumlah: $total (dari $# argumen)"
}
sum 1 2 3 4 # Jumlah: 10 (dari 4 argumen)Function yang memeriksa jumlah argumen sebelum beraksi:
ensure_dir() {
if (( $# != 1 )); then
print "usage: ensure_dir <path>" >&2
return 1
fi
mkdir -p "$1"
}Perhatikan >&2 — redirect ke stderr, dan return 1 untuk memberi sinyal gagal (kita bahas detail di episode 16).
Fitur Zsh yang sering diabaikan: autoload. Dengan autoload -Uz nama, Zsh hanya membaca definisi function saat pertama dipanggil. Ini menghemat startup time.
# Definisi disimpan di file terpisah, lalu:
autoload -Uz ensure_dirSyaratnya: file fungsi harus berada di direktori yang terdaftar di fpath, dan isi file adalah seluruh definisi function.
fpath adalah array (mirip path, episode 4) yang berisi direktori pencarian fungsi autoload. Ini fondasi dari sistem completion (function _* di episode 6) sekaligus cara menata fungsi pribadi.
fpath=(~/.zsh/functions $fpath)
autoload -Uz ~/.zsh/functions/*(:t)Struktur yang dianjurkan:
~/.zsh/functions/
├── ensure_dir # satu file = satu function
├── mydir
└── sumIsi file ensure_dir:
#!/usr/bin/env zsh
ensure_dir() {
if (( $# != 1 )); then
print "usage: ensure_dir <path>" >&2
return 1
fi
mkdir -p "$1"
}Perhatikan: function autoload TIDAK perlu baris autoload di dalam file — ia hanya berisi definisi. Panggil ensure_dir /tmp/foo kapan pun dan Zsh memuat file ini di balik layar.
| Kebutuhan | Pilih |
|---|---|
| Singkatan perintah statis | Alias (alias ll='ls -l') |
| Alias yang muncul di tengah perintah | Global alias (alias -g) |
| Handler per ekstensi file | Suffix alias (alias -s) |
| Logika dengan argumen & kondisi | Function |
| Fungsi yang jarang dipakai | Function + autoload + fpath |
Tip
Aturan praktis: gunakan alias untuk 80% kebutuhan singkatan, function untuk hal yang punya logika percabangan, dan autoload untuk function yang jarang dipanggil. Jangan pernah menulis function satu baris padahal alias cukup — itu hanya menambah kompleksitas.
alias gs='git status' diikuti alias git='g' bisa menciptakan lingkaran; uji dengan which -a nama.which -f nama menampilkan definisi function; pastikan tidak konflik dengan binary.fpath, Zsh melempar command not found saat dipanggil; cek dengan print -l $fpath.Inti yang harus dibawa pulang:
-g global (di mana pun), -s suffix (per ekstensi).nama() {} dengan $0, $@, $#, return code.fpath = function dimuat on-demand, startup tetap cepat.Di episode 11 selanjutnya kita akan membahas scripting: control flow & arsitektur — if/case/for/while/until, double bracket [[ ]], arithmetic (( )), variabel local yang wajib di fungsi, associative array typeset -A, dan opsi errexit/nounset untuk skrip yang aman. Sampai jumpa di episode 11!