Nếu bạn là người đã quen dùng ứng dụng desktop khi chuyển sang dùng terminal (console), hẳn bạn sẽ rất khó chịu vì màn hình terminal toàn text, nền đen, chữ trắng xám đơn điệu, không còn chuột bấm kéo thả. Tuy nhiên ứng dụng terminal lại không thể thiếu đối với lập trình web back end hay triển khai devops. Bài viết này tôi giới thiệu Zsh, OhMyZsh và Powerlevel10k: tổ hợp 3 phần mềm giúp terminal đẹp hơn, hữu ích hơn.

Zsh là gì

Zsh là thư viện xử lý các lệnh gõ vào terminal bao gồm cả ngôn ngữ kịch bản. Trước zsh còn có bash, ash... Zsh có những cải tiến sau đây:

  • Rút gọn lệnh chuyển thư mục. Trước đây bạn phải gõ cd directory nay chỉ cần có directory. Hay .. lùi ra 1 cấp thư mục, ... lùi ra 2 cấp thư mục.
  • Tự động hoàn thành nốt khi người dùng gõ lệnh (auto completion)
  • Cú pháp so sánh matching linh hoạt: ** match với nhiều thư mục, | match điều kiện OR, ~^ loại trừ.
  • Bổ xung các plugins để thêm chức năng cho Zsh shell
  • Tạo alias để gõ lệnh tắt. Ví dụ thay docker-compose bằng dc, thay vagrant bằng v, khởi động Visual Studio Code từ terminal..
  • ....

OhMyZsh là gì?

OhMyZsh là thư viện chạy trên Zsh mở rộng thêm các plugins, themes, cấu hình...

  • Danh sách các plugins trên OhMyZsh. Các plugins này thường hỗ trợ auto-completion: hiểu được ý đồ người dùng từ đó đưa ra gợi ý sát thực nhất.
  • Danh sách các themes trên OhMyZsh

Ngoài OhMyZsh còn có FishShell. Điểm khác biệt FishShell bao gồm cả thư viện Shell và chức năng bổ xung plugins, chọn themes. Có nghĩa FishShell tương đương với Zsh kết hợp với OhMyZsh. FishShell có nhiều điểm rất mạnh tuy nhiên cú pháp của nó không tương thích với Bash Shell (vốn là mặc định trên các hệ điều hành Linux). Còn Zsh thì tương thích 100% với Bash Shell và chỉ mở rộng thêm. Điều này giúp bạn không bị lúng túng khi chạy một đoạn mã Bash script trên Zsh.

Powerlevel10k

Theme trong terminal không hẳn chỉ thay đổi màu sắc để bớt đơn điệu mà nó giúp cho người dùng có nhiều thông tin hơn thông qua màu sắc, ký tự đặc biệt. Ví dụ khi vào một thư mục quản lý phiên bản bằng git cần hiển thị branch, số file bị sửa đổi

Màn hình terminal căn bản

Màn hình căn bản

Cấu hình PowerLevel10k bằng lệnh p10k configure

cấu hình powerlevel 10k

File cấu hình OhMyZsh ~/.zshrc

# If you come from bash you might have to change your $PATH.
export PATH=$HOME/bin:/usr/local/bin:$PATH
export GOPATH=$HOME/golang
export GOROOT=/usr/local/go
export PATH=$PATH:$GOPATH/bin:$GOROOT/bin
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

# Path to your oh-my-zsh installation.
export ZSH="/Users/techmaster/.oh-my-zsh"

export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8

ZSH_THEME="powerlevel10k/powerlevel10k"
source  ~/.oh-my-zsh/custom/themes/powerlevel10k/powerlevel10k.zsh-theme
POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_last

plugins=(
  git
  zsh-autosuggestions
)

source $ZSH/oh-my-zsh.sh
# Bổ xung tính năng gợi ý như fish
# https://github.com/zsh-users/zsh-autosuggestions/blob/master/INSTALL.md
source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh

# You may need to manually set your language environment
export LANG=en_US.UTF-8

alias cl="clear"
alias code="/Applications/Visual\ Studio\ Code.app/Contents/Resources/app/bin/code $argv"
alias subl="/Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl $argv"
alias brewup="brew update; brew upgrade;  brew cleanup; brew doctor"
alias lc="clear; ls"
alias v="vagrant"
alias dc="docker-compose"

# Advanced Aliases.
# ls, the common ones I use a lot shortened for rapid fire usage
alias l='ls -lFh'     #size,show type,human readable
alias ldot='ls -ld .*'
alias lrt='ls -1Fcrt'

alias zshrc='nano ~/.zshrc' # Quick access to the ~/.zshrc file

alias grep='grep --color'
alias t='tail -f'

alias h='history'
alias p='ps -f'

alias pip='noglob pip'
export PATH="/usr/local/sbin:$PATH"

# Changes the ulimit limits.
ulimit -n 8192

# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
export SDKMAN_DIR="/Users/techmaster/.sdkman"
[[ -s "/Users/techmaster/.sdkman/bin/sdkman-init.sh" ]] && source "/Users/techmaster/.sdkman/bin/sdkman-init.sh"

File cấu hình ~/.p10k.zsh cho PowerLevel10k

Một lựa chọn phổ biến là rút ngắn thư mục lại

typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_last