Go to home
All posts

Setup Ubuntu 24.04 dengan Zsh dan Autocompletion agar Terminal Lebih Nyaman

· 12 min

Setup Ubuntu 24.04 dengan Zsh dan Autocompletion agar Terminal Lebih Nyaman

Panduan lengkap mengubah terminal Ubuntu 24.04 menjadi lebih nyaman untuk developer dengan Zsh, autocompletion, autosuggestions, syntax highlighting, fzf, zoxide, eza, dan berbagai shortcut produktivitas.

Terminal merupakan salah satu tools yang paling sering digunakan oleh developer maupun system administrator. Jika setiap hari bekerja menggunakan SSH, Git, Docker, Frappe, ERPNext, Nginx, Supervisor, atau berbagai command Linux lainnya, konfigurasi shell yang nyaman dapat meningkatkan produktivitas secara signifikan.

Pada tutorial ini kita akan mengubah shell default Ubuntu 24.04 dari Bash menjadi Zsh, kemudian menambahkan autocompletion, autosuggestions, syntax highlighting, pencarian history menggunakan fzf, navigasi folder menggunakan zoxide, serta eza sebagai alternatif modern untuk perintah ls.

Konfigurasi terminal yang baik seharusnya mempercepat pekerjaan tanpa membuat environment menjadi terlalu kompleks.

Stack yang Digunakan #

  • Zsh sebagai shell utama
  • Native Zsh compinit untuk autocompletion
  • zsh-autosuggestions untuk suggestion berdasarkan history
  • zsh-syntax-highlighting untuk membedakan command valid dan tidak valid
  • fzf untuk pencarian history interaktif
  • zoxide untuk navigasi directory yang lebih cepat
  • eza sebagai pengganti ls
  • bat sebagai alternatif cat dengan syntax highlighting
  • Alias untuk Git, Linux server, Nginx, Supervisor, dan Frappe

1. Install Package yang Dibutuhkan #

Pertama, update repository Ubuntu kemudian install semua package yang akan digunakan.

sudo apt update

sudo apt install -y \
 zsh \
 zsh-autosuggestions \
 zsh-syntax-highlighting \
 fzf \
 zoxide \
 eza \
 bat \
 git \
 curl

Setelah proses instalasi selesai, cek versi Zsh.

zsh --version

2. Jadikan Zsh sebagai Default Shell #

Gunakan perintah chsh agar Zsh menjadi shell default untuk user saat ini.

chsh -s "$(which zsh)"

Untuk memastikan perubahan sudah tersimpan, cek konfigurasi user pada file /etc/passwd.

grep "$USER" /etc/passwd

Bagian terakhir seharusnya mengarah ke /usr/bin/zsh. Setelah itu logout dari SSH lalu login kembali. Jika ingin langsung mencoba tanpa logout, gunakan perintah berikut.

exec zsh

3. Konfigurasi File .zshrc #

File ~/.zshrc merupakan file konfigurasi utama Zsh. Sebelum mengubahnya, buat backup terlebih dahulu.

cp ~/.zshrc ~/.zshrc.backup 2>/dev/null || true

Kemudian buka file konfigurasi.

nano ~/.zshrc

Gunakan konfigurasi berikut sebagai dasar.

export PATH="$HOME/.local/bin:$PATH"

HISTFILE="$HOME/.zsh_history"
HISTSIZE=50000
SAVEHIST=50000

setopt APPEND_HISTORY
setopt INC_APPEND_HISTORY
setopt SHARE_HISTORY
setopt HIST_IGNORE_DUPS
setopt HIST_IGNORE_ALL_DUPS
setopt HIST_FIND_NO_DUPS
setopt HIST_REDUCE_BLANKS
setopt HIST_VERIFY
setopt AUTO_CD
setopt INTERACTIVE_COMMENTS
unsetopt BEEP

bindkey -e
bindkey "^[[H" beginning-of-line
bindkey "^[[F" end-of-line

autoload -U up-line-or-beginning-search
autoload -U down-line-or-beginning-search
zle -N up-line-or-beginning-search
zle -N down-line-or-beginning-search
bindkey "^[[A" up-line-or-beginning-search
bindkey "^[[B" down-line-or-beginning-search

autoload -Uz compinit
mkdir -p "$HOME/.cache/zsh"
compinit -d "$HOME/.cache/zsh/zcompdump"

zstyle ':completion:*' menu select
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}'
zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}"
zstyle ':completion:*:descriptions' format '%F{yellow}-- %d --%f'
zstyle ':completion:*' group-name ''
zstyle ':completion:*' use-cache on
zstyle ':completion:*' cache-path "$HOME/.cache/zsh"

if [ -f /usr/share/zsh-autosuggestions/zsh-autosuggestions.zsh ]; then
 source /usr/share/zsh-autosuggestions/zsh-autosuggestions.zsh
fi

if [ -f /usr/share/doc/fzf/examples/key-bindings.zsh ]; then
 source /usr/share/doc/fzf/examples/key-bindings.zsh
fi

if [ -f /usr/share/doc/fzf/examples/completion.zsh ]; then
 source /usr/share/doc/fzf/examples/completion.zsh
fi

if command -v zoxide >/dev/null 2>&1; then
 eval "$(zoxide init zsh)"
fi

alias c="clear"
alias ..="cd .."
alias ...="cd ../.."
alias ....="cd ../../.."
alias grep="grep --color=auto"

alias gs="git status"
alias ga="git add"
alias gc="git commit"
alias gp="git push"
alias gl="git pull"
alias gd="git diff"
alias gb="git branch"
alias gco="git checkout"

alias ports="sudo ss -lntp"
alias dfh="df -h"
alias duh="du -h"
alias mem="free -h"

if command -v eza >/dev/null 2>&1; then
 alias ls="eza"
 alias ll="eza -lah --group-directories-first"
 alias la="eza -a"
 alias lt="eza --tree --level=2"
else
 alias ll="ls -lah"
 alias la="ls -A"
fi

if command -v batcat >/dev/null 2>&1; then
 alias bat="batcat"
fi

autoload -Uz colors
colors
setopt PROMPT_SUBST
PROMPT='%F{cyan}%n%f@%F{green}%m%f:%F{blue}%~%f
%(?.%F{green}.%F{red})❯%f '

if [ -f /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh ]; then
 source /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
fi

Setelah file disimpan, reload konfigurasi tanpa perlu logout.

source ~/.zshrc

4. Menggunakan Autocompletion #

Zsh memiliki sistem autocompletion yang jauh lebih fleksibel dibanding shell standar. Cukup tekan TAB saat mengetik command.

sudo systemctl rest<TAB>

Zsh dapat melengkapi command menjadi restart. Autocompletion juga dapat digunakan untuk service, branch Git, directory, file, dan banyak command lainnya.

sudo systemctl restart <TAB>

git checkout <TAB>

5. Autosuggestions dari Command History #

Plugin zsh-autosuggestions menampilkan rekomendasi command berdasarkan command yang pernah dijalankan sebelumnya.

sudo supervisorctl status

Jika command tersebut pernah digunakan, ketika Anda mengetik sudo sup, Zsh dapat menampilkan kelanjutan command secara otomatis. Tekan tombol panah kanan untuk menerima suggestion.

6. Syntax Highlighting #

zsh-syntax-highlighting memberikan warna berbeda antara command yang valid dan command yang tidak ditemukan. Fitur sederhana ini sangat membantu mengurangi typo ketika bekerja langsung di server.

git status

gitt status

7. Mencari History dengan fzf #

Salah satu fitur paling berguna dari setup ini adalah pencarian command history menggunakan fzf. Tekan CTRL + R lalu ketik bagian dari command yang ingin dicari.

bench --site advan.localhost migrate
bench restart
bench update
bench --site bpos.localhost doctor
bench setup nginx

Dengan cara ini Anda tidak perlu lagi menekan tombol panah atas berkali-kali untuk mencari command lama.

8. Navigasi Folder Lebih Cepat dengan zoxide #

zoxide dapat dianggap sebagai versi pintar dari perintah cd. Tool ini mempelajari directory yang sering dikunjungi.

cd ~/frappe-custom-15/apps/blueprint_pos/blueprint_pos/api

Setelah directory sering dikunjungi, Anda dapat berpindah ke sana menggunakan bagian dari nama folder.

z blueprint

z api

Fitur ini sangat membantu jika satu server memiliki banyak project atau banyak Frappe Bench.

9. Menggunakan eza sebagai Pengganti ls #

eza merupakan alternatif modern untuk perintah ls. Output-nya lebih informatif dan mendukung tampilan tree.

ll

lt

Alias ll menampilkan file secara detail, sedangkan lt menampilkan struktur directory berbentuk tree hingga dua level.

10. Alias yang Berguna untuk Server #

Jika sering mengelola Ubuntu server, beberapa command panjang dapat dibuat menjadi alias.

alias nginx-test="sudo nginx -t"
alias nginx-reload="sudo systemctl reload nginx"

alias sup="sudo supervisorctl"
alias supstatus="sudo supervisorctl status"

alias ports="sudo ss -lntp"
alias services="systemctl --type=service --state=running"

alias disk="df -h"
alias memory="free -h"
alias cpu="uptime"

Dengan konfigurasi tersebut, command panjang seperti sudo supervisorctl status cukup dijalankan menggunakan supstatus.

11. Alias Git #

Git termasuk command yang paling sering digunakan developer, sehingga alias sederhana dapat mempercepat workflow.

alias gs="git status"
alias ga="git add"
alias gc="git commit"
alias gp="git push"
alias gl="git pull"
alias gd="git diff"
alias gb="git branch"
alias gco="git checkout"

12. Alias untuk Frappe dan ERPNext #

Jika server menjalankan banyak Frappe Bench, Anda dapat menambahkan alias navigasi.

alias f15="cd ~/frappe-15"
alias fc15="cd ~/frappe-custom-15"
alias fb="cd ~/frappe-bench"

alias br="bench restart"
alias bs="bench start"
alias bup="bench update"

Hindari membuat alias migrate yang langsung mengeksekusi semua site jika server menjalankan banyak site. Lebih aman menentukan site secara eksplisit.

bench --site example.localhost migrate

13. Memastikan Autocompletion Docker Berjalan #

Jika Docker sudah terinstall, coba tekan TAB setelah command Docker.

docker <TAB>

docker compose <TAB>

Jika muncul error terkait file completion _docker, kemungkinan terdapat broken symbolic link pada directory completion Zsh.

find -L /usr/share/zsh/vendor-completions -type l -print

Jika file _docker memang merupakan broken symlink, hapus file tersebut kemudian rebuild cache completion.

sudo rm /usr/share/zsh/vendor-completions/_docker
rm -f ~/.zcompdump*
rm -f ~/.cache/zsh/zcompdump*
exec zsh

14. Shortcut Zsh yang Wajib Diketahui #

  • TAB — autocomplete command, file, directory, atau option
  • TAB dua kali — menampilkan pilihan autocomplete
  • CTRL + R — mencari command history menggunakan fzf
  • CTRL + A — memindahkan cursor ke awal command
  • CTRL + E — memindahkan cursor ke akhir command
  • CTRL + U — menghapus teks sebelum cursor
  • CTRL + K — menghapus teks setelah cursor
  • CTRL + W — menghapus satu kata sebelum cursor
  • CTRL + L — membersihkan tampilan terminal
  • CTRL + C — membatalkan command yang sedang berjalan
  • CTRL + Z — suspend process
  • Panah kanan — menerima autosuggestion
  • Panah atas dan bawah — mencari history berdasarkan teks yang sedang diketik

15. Opsional: Menggunakan Starship Prompt #

Jika menginginkan tampilan prompt yang lebih modern, Starship dapat digunakan untuk menampilkan informasi Git branch, versi Python, Node.js, Rust, Go, status command, dan execution time.

Namun untuk server production, prompt Zsh sederhana sering kali lebih ideal karena lebih ringan, lebih sedikit dependency, dan lebih mudah ditroubleshoot ketika melakukan SSH ke banyak server.

16. Hasil Akhir #

Setelah seluruh konfigurasi selesai, environment terminal akan memiliki autocomplete, command suggestions, syntax highlighting, pencarian history interaktif, navigasi directory pintar, dan alias untuk command yang sering digunakan.

Zsh
 |
 +-- Native compinit
 | +-- TAB autocomplete
 |
 +-- zsh-autosuggestions
 | +-- command suggestion dari history
 |
 +-- zsh-syntax-highlighting
 | +-- command valid dan invalid lebih mudah dibedakan
 |
 +-- fzf
 | +-- CTRL + R interactive history
 |
 +-- zoxide
 | +-- smart directory navigation
 |
 +-- eza
 | +-- modern replacement untuk ls
 |
 +-- bat
 | +-- modern replacement untuk cat
 |
 +-- aliases
 +-- Git
 +-- systemctl
 +-- Supervisor
 +-- Nginx
 +-- Frappe dan ERPNext

Kesimpulan #

Untuk Ubuntu 24.04 yang digunakan sebagai development server maupun production server, kombinasi native Zsh, zsh-autosuggestions, zsh-syntax-highlighting, fzf, zoxide, dan eza memberikan keseimbangan yang baik antara kenyamanan, kecepatan, dan kemudahan maintenance.

Pendekatan ini juga tidak bergantung pada framework besar seperti Oh My Zsh, sehingga startup shell tetap ringan dan konfigurasi lebih mudah dipahami ketika terjadi masalah.

Terminal yang nyaman bukan sekadar soal tampilan. Tujuan utamanya adalah mengurangi command berulang, menghindari typo, dan membuat pekerjaan di server menjadi lebih cepat.

© 2026 Didik Prabowo