Konfigurasi zsh di Arch Linux dan mengaktifkan vi-mode


insert_invitation Tanggal: Rabu, 23 Desember 2020. 12:25:13 WIB
perm_contact_calendar Penulis: selene
local_offer Tags: Linux, shell, zsh


Halo!
Selamat siang teman-teman, di post pertama di situs saya ini, saya akan membagikan tutorial cara konfigurasi shell zsh di Arch Linux dan mengaktifkan vi-mode.

Gunakan daftar isi diatas untuk memudahkan pencarian tutorial.


Instalasi shell zsh

Pertama pastikan list repo sudah diupdate ke yang terbaru, saya asumsikan pakai sudo untuk eskalasi perijinan super user / root.

$ sudo pacman -Syy

Jika sudah melakukan update repo, maka selanjutnya install zsh dari package manager:

$ sudo pacman -S zsh

Kemudian lakukan pengecekan dengan which & chsh:

$ which zsh
/usr/bin/zsh
$ chsh -l
/bin/sh
/bin/bash
/bin/zsh
/usr/bin/zsh

Jika muncul path /usr/bin/zsh berarti zsh sukses terinstall.


Setting default shell ke zsh

Lakukan perintah berikut untuk mengganti default shell ke zsh:

$ chsh -s /usr/bin/zsh

Lalu lakukan logout user atau reboot untuk menerapkan zsh:

$ logout
atau
$ sudo reboot

Jika sudah logout / reboot biasanya muncul wizard zsh teman-teman bisa skip wizardnya karena kita nanti kita akan konfigurasi sendiri, selanjutnya cek dengan perintah berikut untuk memastikan:

$ echo $0
/bin/zsh

Jika muncul path /bin/zsh berarti default shell sekarang sudah di set dengan zsh.


Membuat file konfigurasi zsh ~/.zshrc

Buat file history & alias:

% cd ~
% touch .histfile .aliases

Buka file ~/.zshrc dengan text editor favorit teman-teman.
Bisa dihapus semua line disana, sehingga isi file menjadi kosong.

Set history, bisa diubah ke 10000 misal:

HISTFILE=~/.histfile
HISTSIZE=1000
SAVEHIST=1000

Mengaktifkan dukungan 256color untuk terminal emulator:

export TERM="xterm-256color"

Set editor ke neovim, bisa ubah ke vim / pico / micro:

export VISUAL=nvim
export EDITOR="$VISUAL"

Set path environtment, untuk path env lain teman-teman bisa tambahkan sendiri:

PATH='/usr/local/bin:/usr/bin:/bin:/usr/games:/usr/local/sbin:/usr/sbin:/sbin'

Set autoload file alias:

if [ -f ~/.aliases ]; then
    . ~/.aliases
fi

Set shared history, jadi jika membuka terminal / terminal emulator lain maka ikut 1 history:

setopt INC_APPEND_HISTORY
setopt SHARE_HISTORY

Set auto cd, bisa cd ke suatu dir tanpa menambahkan perintah “cd” diawal:

setopt AUTO_CD
# Contoh penggunaan:
# % /tmp
# tanpa
# % cd /tmp

Set alias agar tidak expand:

setopt COMPLETE_ALIASES

Mengaktifkan auto correct command & expand dir:

setopt CORRECT_ALL
# Contoh penggunaan, misal salah command, ingin run less keliru kess:
# % kess file.txt
# zsh: correct 'kess' to 'less' [nyae]?
#
# Maka otomatis keluar prompt auto correct, bisa tekan 'y' untuk setuju
#
# Contoh penggunaan auto expand dir:
# % cd /h/s/Dow
#
# Ketika menekan tombol 'Tab' pada keyboard, auto expand menjadi:
# % cd /home/selene/Downloads/

Mengaktifkan vi-mode, disini opsional, kecuali teman-teman sudah terbiasa menggunakan vi(m):

bindkey -v
# Jika vi-mode aktif, teman-teman bisa menggunakan
# keyboard shortcut vi seperti:
# 2cw
# 4b
# 0
# $
# 4l
# Bisa digunakan, asyik 'kan

Dengan mengaktifkan vi-mode, teman-teman juga bisa menggunakan CTRL+h sebagai ganti backspace, sehingga lebih praktis.

Set keyboard shortcut zsh:

# ctrl+e = masuk editor nvim untuk menulis command
# cocok untuk menulis command yg panjang
bindkey "^e" edit-command-line

# ctrl+p = scroll history keatas
bindkey "^p" up-history

# ctrl+n = scroll history kebawah
bindkey "^n" down-history

# ctrl+j = run command, di posisi cursor sekarang berada
# mirip tekan 'Enter'
bindkey "^[j" accept-line

# ctrl+w = hapus kata cursor sekarang berada
bindkey "^[w" backward-kill-word

# ctrl+r = pencarian history
bindkey "^[r" history-incremental-search-backward

# kj = escape / masuk normal mode
bindkey "kj" vi-cmd-mode


# Jika teman-teman ingin mapping sendiri, teman-teman bisa menggunakan
# perintah "% cat" lalu tekan keyboard / kombinasi keyboard
# & lihat output disana
# Hasil output bisa dituliskan ke file konfigurasi
#
# ctrl+p & ctrl+n mungkin akan jarang digunakan,
# karena kita bisa langsung masuk
# normal mode 'kj' & scroll history dengan tombol 'j' & 'k'

Menonaktifkan zsh ctrl+s, karena kita bisa menggunakan ctrl+s untuk neovim nantinya:

stty -ixon

Set zsh auto completion:

zstyle :compinstall filename '~/.zshrc'
autoload -Uz compinit && compinit -I
compinit

Mengaktifkan editor mode dengan ctrl+e:

autoload -z edit-command-line
zle -N edit-command-line

Set key timeout, agar keybind ‘kj’ tadi dapat bekerja:

export KEYTIMEOUT=25


Konfigurasi shell prompt zsh

Langkah terakhir untuk setting zsh sekarang adalah mengonfigurasi shell prompt.

Silahkan teman-teman pilih sendiri yang mana yang disuka:

PROMPT='%/ %# '

# /home/selene/Documents %
PROMPT='%~ %# '

# ~/Documents %
PROMPT='%1~ %# '

# Documents %
PROMPT='%2~ %# '

# ~/Documents %
PROMPT='[%t] %2~ %# '

# [ 3:30] ~/selene/Documents %
PROMPT='[%T] %2~ %# '

# [15:30] ~/selene/Documents %

Untuk kustomisasi lain lebih lengkapnya bisa lihat “% man zshmisc”.


Menambahkan plugin zsh-autosuggestions

Untuk menambahkan plugin zsh-autosuggestions, pertama kita harus membuat directory untuk menyimpan plugin tersebut.
Directory-nya bebas, bisa di ~/.zsh, ~/.git, terserah.
Untuk tutorial ini saya memakai ~/.zsh:

% cd ~
% mkdir .zsh

Clone repo zsh-autosuggestions ke dalam directory tadi:

% git clone https://github.com/zsh-users/zsh-autosuggestions .zsh/zsh-autosuggestions

Tambahkan konfigurasi berikut ke dalam ~/.zshrc:

source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh

# Bisa ditaruh dibawah PATH
# Dimanapun tapi diatas PROMPT


Sentuhan terakhir pada file konfigurasi ~/.zsh

Sekarang kita sudah bisa mengonfigurasi shell zsh di Arch Linux, selanjutnya tambahkan command berikut di bagian paling bawah file konfigurasi, setelah PROMPT:

clear

Fungsinya untuk wipe layar ketika kita melakukan source ke ~/.zshrc atau ketika meload file konfigurasi baru.


Konfigurasi file ~/.aliases

Konsep alias adalah kita bisa menyingkat command yg panjang menjadi singkat, sehingga menjadi praktis.
Alias ini sangat powerful, bisa menghemat waktu & mempermudah pekerjaan.

Sekarang kita edit file ~/.aliases, silahkan teman-teman buka dengan text editor favorit teman-teman.
Lalu tambahkan misal:

# git
alias giib='git branch'
alias giic='git commit'
alias giig='git log --all --decorate --oneline --graph'
alias giis='git status'
alias giil='git log'
alias giiw='git switch'
alias gicek='git checkout'
alias giip='git push origin'
alias giict='git config --global credential.helper "cache --timeout=3600"'
alias giicc='git config --global credential.helper cache'

# tmux
alias ta='tmux a -t'
alias ts='tmux new-session -t'
alias tl='tmux ls'

# directory
alias hh='cd ~/'
alias hd='cd ~/Documents'
alias hdw='cd ~/Downloads'
alias ll='ls -hal | less'

# zsh
alias cll='source ~/.zshrc'
alias editz='nvim ~/.zshrc'

Diatas sebagai contoh saja, teman-teman bisa menambahkan alias apapun sesuka hati.


Rekap konfigurasi zsh di Arch Linux

Kita sudah menginstall zsh.
Sudah mengonfigurasi zsh.
Sudah mengintegrasikan zsh dengan aliases dan zsh-autosuggestions.
Sudah mengaktifkan vi-mode di zsh.

Berikut rekap file konfigurasi ~/.zsh dari atas ke bawah:

HISTFILE=~/.histfile
HISTSIZE=1000
SAVEHIST=1000

export TERM="xterm-256color"
export VISUAL=nvim
export EDITOR="$VISUAL"

PATH='/usr/local/bin:/usr/bin:/bin:/usr/games:/usr/local/sbin:/usr/sbin:/sbin'

if [ -f ~/.aliases ]; then
    . ~/.aliases
fi

setopt INC_APPEND_HISTORY
setopt SHARE_HISTORY
setopt AUTO_CD
setopt COMPLETE_ALIASES
setopt CORRECT_ALL

bindkey -v
bindkey "^[e" edit-command-line
bindkey "^[p" up-history
bindkey "^[n" down-history
bindkey "^[j" accept-line
bindkey "^[w" backward-kill-word
bindkey "^[r" history-incremental-search-backward
bindkey "kj" vi-cmd-mode

stty -ixon

zstyle :compinstall filename '~/.zshrc'
autoload -Uz compinit && compinit -I
compinit

autoload -z edit-command-line
zle -N edit-command-line

export KEYTIMEOUT=25

source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh

PROMPT='%1~ %# '
clear


Penutup

Demikian cara konfigurasi zsh di Arch Linux dan mengaktifkan vi-mode, semoga isi post ini bisa bermanfaat buat teman-teman semua.


Referensi

  1. https://scriptingosx.com/2019/07/moving-to-zsh-06-customizing-the-zsh-prompt/
  2. https://wiki.archlinux.org/index.php/Zsh

arrow_drop_up ke atas arrow_drop_up