Thursday, November 21, 2024

Zsh là gì?

-

1. Tổng quan.

Zsh (Z Shell) là một loại shell nâng cao, được phát triển từ Bourne Shell (sh) và cung cấp nhiều tính năng và cải tiến so với các shell khác như Bash.

Zsh có nhiều tính năng hữu ích, bao gồm:

  • Giao diện dòng lệnh tương tác: Zsh cung cấp giao diện dòng lệnh tương tác mạnh mẽ với việc hoàn thiện tự động, gợi ý câu lệnh và hoàn thiện từ khóa. Điều này giúp tăng hiệu suất và tiện ích khi làm việc với lệnh và tệp tin.
  • Tích hợp với Git: Zsh có tích hợp sẵn với Git, cung cấp các lệnh và tiện ích tiện dụng cho việc làm việc với hệ thống quản lý phiên bản Git. Ví dụ: tự động hoàn thiện tên nhánh, hiển thị trạng thái sạch/dirty và nhiều hơn nữa.
  • Cấu hình linh hoạt: Zsh cho phép người dùng tùy chỉnh nhiều cấu hình và tuỳ biến hơn so với các shell khác. Người dùng có thể thay đổi giao diện, bổ sung các plugin và theme, tạo các chức năng tùy chỉnh và nhiều hơn nữa để phù hợp với nhu cầu của mình.
  • Tích hợp mạnh mẽ: Zsh tích hợp tốt với các công cụ và tiện ích khác như Oh My Zsh, Prezto, Powerlevel10k và nhiều hơn nữa. Điều này giúp mở rộng khả năng của Zsh và cung cấp một trải nghiệm dòng lệnh đáng chú ý.

Zsh được coi là một shell mạnh mẽ và linh hoạt cho các nhà phát triển và người dùng dòng lệnh, cung cấp nhiều tính năng và cải tiến giúp tăng hiệu suất và tiện ích khi làm việc với terminal.

2. Cài đặt.

Để cài đặt Zsh trên hệ thống của bạn, bạn có thể làm theo các bước sau:

  • Trên Ubuntu và các bản phân phối dựa trên Ubuntu:
sudo apt update
sudo apt install zsh -y 
  • Trên CentOS và các bản phân phối dựa trên CentOS:
yum install zsh -y
  • Nếu bạn đang sử dụng Homebrew trên macOS, hãy chạy lệnh sau:
brew install zsh

3. Thiết lập Zsh làm mặc định:

Chạy lệnh sau để chuyển từ Bash sang Zsh, bạn sẽ được yêu cầu nhập mật khẩu người dùng của bạn để xác nhận.

chsh -s $(which zsh)

Để quay lại sử dụng mặc định là Bash thay vì Zsh trên macOS, bạn có thể thực hiện các bước sau:

  • Mở Terminal trên máy tính Mac của bạn.
  • Chạy lệnh sau để kiểm tra shell hiện tại đang sử dụng:bashCopy codeecho $SHELL Kết quả sẽ hiển thị đường dẫn đến shell hiện tại, ví dụ: /bin/zsh.
  • Để chuyển về sử dụng Bash, chạy lệnh sau:bashCopy codechsh -s /bin/bash Bạn sẽ được yêu cầu nhập mật khẩu người dùng của bạn để xác nhận thay đổi.
  • Đăng xuất khỏi tài khoản người dùng hiện tại và đăng nhập lại.
  • Sau khi đăng nhập lại, shell mặc định sẽ được thay đổi thành Bash.

Bây giờ, khi bạn mở Terminal, shell mặc định sẽ là Bash thay vì Zsh.

4. Cài đặt một số tính năng bổ sung.

Các tiện ích và plugin bạn đề cập đến (autosuggestions, zsh-history-substring-search, zsh-syntax-highlighting và spaceship-prompt) là những công cụ mở rộng được sử dụng phổ biến trong shell Zsh để cải thiện trải nghiệm dòng lệnh. Dưới đây là mô tả về mỗi công cụ:

  • Autosuggestions: Đây là một công cụ giúp gợi ý tự động trong quá trình gõ lệnh. Khi bạn nhập một phần của lệnh, autosuggestions sẽ đề xuất các lệnh hoặc từ khóa phù hợp dựa trên lịch sử lệnh trước đó.
  • Zsh-history-substring-search: Công cụ này cho phép bạn tìm kiếm và truy cập vào các lệnh trong lịch sử lệnh của Zsh bằng cách sử dụng một phần của lệnh. Khi bạn gõ một phần của lệnh, zsh-history-substring-search sẽ tìm kiếm trong lịch sử và cho phép bạn dễ dàng điều hướng qua các lệnh phù hợp.
  • Zsh-syntax-highlighting: Đây là một công cụ cung cấp tô sáng cú pháp cho các lệnh và đối số khi bạn gõ trong Zsh. Nó giúp bạn dễ dàng nhận biết các thành phần cú pháp của lệnh, các tên tập tin và các thông tin khác, tạo ra một trải nghiệm gõ lệnh tương tác hơn.
  • Spaceship-prompt: Spaceship-prompt là một chủ đề giao diện dòng lệnh (prompt) cho Zsh. Nó cung cấp một giao diện dòng lệnh rất năng động và tùy chỉnh, hiển thị các thông tin như tên người dùng, tên máy tính, thư mục hiện tại, phiên bản Git và nhiều thông tin khác. Spaceship-prompt giúp bạn tạo ra một prompt dễ nhìn và chức năng cao.

Tất cả các công cụ và plugin này cùng nhau cải thiện tính năng và hiệu suất của Zsh, mang lại trải nghiệm dòng lệnh linh hoạt và tiện ích hơn. Bạn có thể cài đặt và tùy chỉnh từng công cụ này để phù hợp với nhu cầu và sở thích của bạn trong việc sử dụng Zsh.

mkdir -p $HOME/.zsh/
cd $HOME/.zsh/
git clone https://github.com/zsh-users/zsh-autosuggestions.git
git clone https://github.com/zsh-users/zsh-history-substring-search.git
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git
git clone https://github.com/spaceship-prompt/spaceship-prompt.git

Nội dung file ~/.zshrc.

source $HOME/.zsh/spaceship-prompt/spaceship.zsh
source $HOME/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh
source $HOME/.zsh/zsh-history-substring-search/zsh-history-substring-search.zsh
source $HOME/.zsh/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

vif(){ item=$(find . -type f \( -name "*.sh" -o -name "*.yml" -o -name "*.py" -o -name "*.php" -o -name "*.yaml" -o -name "*.ini" -o -name "*.txt" \) | fzf-tmux -p 80% -m --prompt="  Fuzzy Finder > " --preview="cat {} | head -500" --reverse) && vi "$item"; }
caf(){ item=$(find . -type f \( -name "*.sh" -o -name "*.yml" -o -name "*.py" -o -name "*.php" -o -name "*.yaml" -o -name "*.ini" -o -name "*.txt" \) | fzf-tmux -p 80% -m --prompt="  Fuzzy Finder > " --preview="cat {} | head -500" --reverse) && cat "$item"; }
cdf(){ item=$(fd --type d | fzf-tmux -p 80% -m --prompt="  Fuzzy Finder > " --preview="ls -al {} | head -500" --reverse) && cd "$item"; }
bind -x '"\C-f": "vif"'
bind -x '"\C-b": "cdf"'

alias f='item=$(fd --type f | fzf-tmux -p 80% -m --prompt="  Fuzzy Finder > " --preview="cat {} | head -500" --reverse) && vi "$item"'
alias d='item=$(fd --type d | fzf-tmux -p 80% -m --prompt="  Fuzzy Finder > " --preview="ls -al {} | head -500" --reverse) && cd "$item"'

alias tkill="t kill-server"
alias tmux="/usr/local/bin/tmux"
alias ll='ls -al'

bind -x '"\C-]": fzf-history-buffer'

function fzf-history-buffer() {
  local HISTORY=$(history | awk '{$1=""; print $0}' | sort | uniq | fzf-tmux -p 80% --prompt='  Fuzzy Finder > ' --header='Choose History Command Line' +m --print-query | tail -n 1 | sed -e 's/^[[:space:]]*//')
  BUFFER=$HISTORY
  eval $BUFFER
}

function fzf-remote-ssh() {
  local SSH_HOST=$(awk '
      tolower($1)=="host" {
          for (i=2; i<=NF; i++) {
              if ($i !~ "[*?]") {
                  print $i
              }
          }
      }
  ' ~/.ssh/config | sort | fzf-tmux -p 80% --prompt='  Fuzzy Finder > ' --header='Choose Server SSH' +m)
  ssh $SSH_HOST
}
alias r="fzf-remote-ssh"
bind -x '"\C-h": fzf-history-buffer'

tmux_list_session() {
  local tmux_session=$(tmux ls 2>/dev/null | wc -l | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
  if [[ $tmux_session -ge 1 ]]; then
    local j=1
    local ip=()
    clear; echo; echo "- Tmux all session:"
    tmux ls | awk '{print $1}' | sed 's/:$//' | while IFS= read -r line; do
      echo "$j) $line"
      ip[$j]=$line
      ((j++))
    done

    echo; read -p "- Please select the session name you want to connect or press 0 to create new session: " tmux_session_name
    if [[ $tmux_session_name == 0 ]]; then
      read -p "- Please select the session name you want to create: " tmux_session_name
      command="tmux new -s $tmux_session_name"
      eval "$command"
    else
      tmux_session_name=${ip[$tmux_session_name]}
      command="tmux a -t $tmux_session_name"
      eval "$command"
    fi
  else
    read -p "- Please enter the session name you want to create: " tmux_session_name
    command="tmux new -s $tmux_session_name"
    eval "$command"
  fi
}
alias t='tmux_list_session'

Cuối cùng chạy lênh source ~/.zshrc để áp dụng thay đổi.

Previous article
Next article

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories