Post on: Jul 2, 2024Last edited: Jul 1, 2024Words 00 min

type
status
date
slug
summary
tags
category
icon
password

Mở đầu

Bất cứ ai sử dụng Linux chắc đã đều quen với giao diện dòng lệnh, với bash, zsh, fish là những shell phổ biến. Dần dà, các tweaker với khả năng viết shell script đỉnh cao đã tuỳ biến shell, không chỉ là đẹp hơn, mà còn tăng hiệu suất sử dụng.
Đa số các plugin manager và các configuration framework đều dành cho zsh . Lý do là vì bản thân zsh thông thường đã có khả năng mở rộng mạnh mẽ với các module tích hợp sẵn, chẳng hạn như:
  • compinit: hỗ trợ gợi ý hoàn thành câu lệnh
  • promptinit: để tuỳ chỉnh prompt
  • vcs_info: để tích hợp với git hiển thị ra thông tin của repo trên shell
  • autoload: dùng để load plugin một cách lazy (chỉ load khi cần), giúp tiết kiệm thời gian mở shell
  • zstyle: tuỳ chỉnh hành vi của module
Tuy nhiên, bản thân việc config bằng các module cơ bản của zsh là không hề dễ. Chính vì vậy các hảo thủ đã lập ra các configuration framework và plugin manager để giúp mọi người tuỳ biến shell một cách dễ dàng hơn.
Chắc hẳn mọi người đã từng nghe qua về oh-my-zsh , prezto, antigen cho phép quản lý và tải các plugin cho zsh. Nhìn chung, khi tuỳ biến shell chúng ta sẽ quan tâm đến:
  1. Config có dễ không
  1. Shell tải có nhanh và tối ưu không
  1. Có thể scale được nhiều chức năng không
Trong bài viết này, mình sẽ giới thiệu một cách config mà theo mình thoả mãn được cả 3 tiêu chí trên.

Về zinit

Lý do mình cho rằng sử dụng zinit có thể thoả mãn cả 3 tiêu chí trên là vì:
  1. Syntax của zinit khá dễ hiểu và linh hoạt. Đủ phức tạp để hỗ trợ tính năng nhưng cũng đủ đơn giản để có thể viết config một cách sanity.
  1. zinit có chức năng Turbo mode loading cho phép tải shell trước, và load các module một cách bất đồng bộ, nên shell gần như lên ngay lập tức.
  1. zinit có thể load plugin, command, script từ bất cứ nguồn nào và bất cứ framework nào (omz, prezto, etc)
Các bạn có thể xem config zsh trong dotfile ở github của mình (đã có ở phần trước).
Sau đây mình sẽ viết về một số ít cái cần nhớ khi sử dụng zinit.

Các lệnh cơ bản

  • zinit light: load plugin một cách tối giản
  • zinit csearch: kiểm tra các completion đã được cài
  • zinit creinstall: cài đặt completion của plugin
  • zinit cuninstall: xoá completion
  • zinit remove: xoá plugin
  • zinit unload: unload plugin khỏi shell hiện tại
  • zinit self-update: update zinit
  • zinit update: update tất cả các plugin outdated
Tổng cộng có khoảng 45 lệnh.

Load plugin

Để load một plugin theo cách tối giản nhất, ta dùng zinit light.

ice modifier

ice modifier là một cơ chế của zinit cho phép thực thi các option với plugin tiếp theo được load bằng zinit light. Chúng sẽ được load theo thứ tự xuất hiện. Các ice modifier mình thường dùng có:
  • wait"x" : đây là câu lệnh thực hiện cơ chế Turbo Mode. Plugin sẽ được load sau khi shell lên được x giây. Việc thay đổi x có thể được dùng để quản lý trình tự load các plugin sao cho không bị conflict.
  • from"source": để chỉ source mà zinit sẽ lấy plugin. Plugin có thể cài trực tiếp từ GitHub release bằng from"gh-r" .
  • as"x": dùng để tải plugin dưới dạng nào đó.
    • as"command" nếu như plugin có dạng zsh shell script, khi đó zinit sẽ dịch zsh sang bytecode để tối ưu tốc độ,
    • as"program" nếu như plugin là binary, khi đó zsh sẽ chmod +x cho plugin.
  • mv"action": dùng để rename. Thường dùng khi ta cài một file từ GitHub release mà trong name có version, architecture sau khi giải nén. Điểm hay của câu lệnh này là có hỗ trợ wildcard.
    • Chẳng hạn bạn cài ripgrep trực tiếp từ GitHub Release, với tên file là ripgrep-14.1.0-x86_64-unknown-linux-musl.tar.gz (zinit sẽ tự detect architecture của máy và down file tương ứng), sau khi giải nén xong với tên folder dài, mình có thể đổi tên nó bằng lệnh mv"ripgrep* -> rg"
  • lucid: khi zinit tải plugin sẽ có hiện thông báo, ice này sẽ giúp tắt thông báo đi.
  • atclone"cmd": dùng để chạy những câu lệnh cần thiết sau khi clone plugin (để tải completion, manual, init shell)
  • atpull"cmd": giống atclone nhưng sẽ được chạy mỗi khi plugin được update.

Một số plugin

Trong dotfile của mình có sử dụng một số plugin sau. Đây chưa phải tất cả, chi tiết hãy xem trong dotfiles của mình.

fzf + fzf-tab

Một fuzzy finder phổ biến, dùng để fuzz option và autocomplete lệnh, cũng như preview file.

atuin

Một plugin cho phép lưu và sync shell history giữa tất cả các máy.

eza

ls nhưng tốt hơn và backward-compatible.

starship

Một framework giúp tuỳ biến prompt mà không phụ thuộc vào shell. Cùng một starship config có thể ném lên bash, zsh, powershell mà không có vấn đề gì.

zoxide

cd nhưng thông minh hơn.
Số lượng plugin trong file .zshrc của mình là chưa nhiều so với các dotfiles khác, vì đơn giản là mình dùng được cái gì thì mới config cái đó. Về sau dotfiles sẽ luôn được cập nhật.

Kết

Vậy là tập 2 của series đã hoàn thành.
Hope you enjoy a new shell experiences, a shiny and arcane-featured one.
See ya.

Loading...
Hello World!

Hello World!

Welcome to my realm! This is the first post.

My setup #1 - i use archwsl btw

⚙️My setup #1 - i use archwsl btw

Because Linux + Windows seamlessly is just surprisingly cool and convenient.