Waktunya Migrasi ke Fish Shell
Aditya Phra•
Setelah pemakaian fish selama seminggu, aku akhirnya memutuskan untuk all in ke fish shell karena fitur autosuggestions, tab completions, dan syntax highlighting yang sudah jadi fitur default.
Jadi, tidak perlu ribet lagi menginstal plugin satu per satu seperti yang aku lakukan sebelumnya di zsh dan bash.
Instalasi
Instalasi fish sesuaikan dengan paket manager yang kamu pakai sekarang, kalau di Arch Linux tinggal:
sudo pacman -S fish
Ganti default shell:
chsh -s /usr/bin/fish
Kalau tanpa mengganti default shell bisa dengan mengedit file ~/.bashrc kemudian isi dengan:
exec fish
Konfigurasi awal
Biasanya aku langsung mematikan fitur kata sambutan yang muncul setiap kali membuka fish:
set -U fish_greeting
Kalau kamu mau mengganti skema warna dan format prompt fish bisa memakai editor konfigurasi web yang harus diaktifkan dengan:
fish_config
Nanti langsung membuka editor konfigurasi versi web di browser.
Prompt yang biasanya kupakai sebelumnya di zsh dan bash itu starship, yang mantapnya bisa juga dipakai di fish shell.
Konfigurasi fish
File konfigurasi fish shell berada di direktori ~/.config/fish:
config.fish, fungsinya sama seperti file.bashrcatau.zshrcfunctions, direktori untuk menyimpan fungsi & aliasfish_variables, file untuk menyimpan variabel universal (nanti dijelaskan)
Environment variable
Deklarasi environment variable di fish shell agak berbeda, biasanya memakai export kalau di bash dan zsh, kalau di fish memakai set seperti ini:
set -gx EDITOR nano
Fungsi -g untuk mendeklarasi variable di global scope dan -x agar variabel dapat diakses oleh child process yang bisa disebut environment variable.
Namun, akses environment variable hanya ada di sesi di mana variabel dideklarasikan. Biar tersedia di setiap sesi shell, bisa memakai fitur variabel universal (-U) seperti ini:
set -Ux EDITOR nano
Atau bisa juga dengan menambahkan konfigurasi ini ke file ~/.config/fish/config.fish:
set -gx EDITOR nvim
Environment variable juga bisa dideklarasikan sementara untuk child process seperti di bash dan zsh:
PAGER=cat git log
Menambahkan PATH baru
Menambahkan PATH baru agar program lokal bisa terdeteksi di shell penting, seperti yang aku lakukan sebelumnya di bash dan zsh.
Contoh ini untuk menambahkan ~/.local/bin ke PATH dengan fungsi fish_add_path:
fish_add_path ~/.local/bin
Cek PATH:
echo "$PATH"
Untuk menghapus ~/.local/bin dari PATH caranya dengan memodifikasi variabel universal fish_user_paths:
set -U fish_user_paths (string match -v ~/.local/bin $fish_user_paths)
Pada dasarnya fungsi fish_add_path itu membuat atau memodifikasi variabel universal fish_user_paths, jadi bisa dimodifikasi manual dengan set seperti yang di atas.
Alias dan fungsi
Cara kerja alias di fish shell sangatlah berbeda dari bash dan zsh. Di fish sendiri alias itu sebenarnya fungsi, bisa dicoba sendiri:
alias --save rmi="rm -i"
Perintah alias di atas akan membuat file ~/.config/fish/functions/rmi.fish yang berisi fungsi:
function rmi --wraps='rm -i' --description 'alias rmi=rm -i'
rm -i $argv
end
Fungsi itu bisa diedit langsung melalui shell:
EDITOR=nano funced rmi
Setelah diedit, simpanlah fungsi ke file agar disimpan permanen:
funcsave rmi
Cara untuk menghapus fungsi tadi:
functions -e rmi
funcsave rmi
Membuat singkatan
Salah satu fitur unik dari fish shell itu bisa membuat singkatan-singkatan mirip alias, tetapi bisa direviu dan edit dulu sebelum dieksekusi.
Untuk membuat singkatan, tambahkan konfigurasi abbr ke ~/.config/fish/config.fish:
abbr -a ga -- git add
Kalau kamu mengetik ga[SPASI] di shell, langsung berubah menjadi seperti ini:
git add
Bisa juga mengatur posisi kursor agar berpindah ke dalam tanda kutip, seperti contoh abbr ini:
abbr -a --set-cursor -- gc git commit -m \'%\'
Contoh abbr agar bisa dipakai dengan sudo:
abbr -a -c '' -c sudo -- rmi rm -i
Jadi, kalau kamu mengetik rmi[SPASI] dan sudo rmi[SPASI], berubah menjadi seperti ini:
rm -i
sudo rm -i