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:- Config có dễ không
- Shell tải có nhanh và tối ưu không
- 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ì:
- 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.
- 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.
- 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ằngfrom"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ệnhmv"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
Là
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
Là
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.
- Author:dnx04
- URL:https://github.com/dnx04/article/my-setup-2-zsh-configuration
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!