Di cư khỏi Oh-my-zsh

Di cư khỏi Oh-my-zsh

Tin ngắn hàng ngày dành cho bạn
  • Từ lúc ra cái tính năng gợi ý cụm từ tìm kiếm ở dưới thanh tìm kiếm thì nhiều người bấm vào hẳn mọi người ạ. Lượt tìm kiếm những cụm từ khác cũng tăng lên so với thời điểm trước đó nhiều lần.

    Cơ mà bên cạnh đó thì blog đang bị dính thêm vụ "spam" tìm kiếm nữa. Có kẻ nào đó nghịch nghợm điền mấy cái liên kết lung tung vào ô, chẳng có gì đáng nói nếu như ô tìm kiếm đó mình gắn thêm AI vào, mỗi lần truy vấn là tốn một lượng tokens nhất định. Phá hoại thật sự 💀

    » Xem thêm
  • Đọc xong "Suối nguồn" rồi mọi người ạ. Quả là một tác phẩm kinh điển, hàm chứa rất nhiều ý nghĩa. Tự hỏi mất bao lâu để tác giả viết ra được câu truyện hay như thế này.

    Tạm gác lại thế giới tưởng tượng, tiếp theo mình sẽ đọc cuốn "Việt Nam sử lược" của tác giả Trần Trọng Kim. Đây như là một cuốn sách xếp vào hàng kinh điển của sự học Việt Nam. Chà, nghe đến đây thôi đã thấy hấp dẫn rồi 🤤

    » Xem thêm
  • Bây giờ là đến cuộc chạy đua MCP. Các bên đang đua nhau tung ra máy chủ MCP cho dịch vụ của mình. Hợp lý thôi vì chẳng ai muốn bỏ lại phía sau 😅.

    Mới đây có mcp-server-cloudflare@hyperdrive-eng/mcp-nodejs-debugger.

    » Xem thêm

Vấn đề

Xin chào các độc giả của 2coffee.dev, như trong một chia sẻ trong chuyên mục Threads, cách đây không lâu tôi đã có một trải nghiệm mới khá thú vị đó "di cư" khỏi oh-my-zsh. Nếu như còn nhớ, bạn sẽ thấy tôi có một bài viết Câu chuyện về hành trình từ Windows sang Linux/Unix - là do zsh và oh-my-zsh, nó là minh chứng cho việc thích sử dụng dòng lệnh như thế nào.

Gõ lệnh là một công việc làm khá thường xuyên, vì thế mà tôi luôn tìm cách để tối ưu hoặc gõ lệnh thế nào cho vừa nhanh mà vừa dễ. Có công cụ nào hay hay là nhào vào học cách sử dụng. Bài viết Migrating Off Oh-My-Zsh and other recent Yak Shavings như một mồi lửa đã vô tình chạm phải váng dầu lênh láng. Đã đến lúc tìm hiểu xem tại sao tác giả lại rời bỏ công cụ tuyệt vời này?

Lại nhắc về oh-my-zsh, khi xem lại quá trình sử dụng mới nhận ra rằng không thực sự dùng nhiều tính năng của nó đến vậy. Oh-my-zsh ra đời từ rất lâu, thời đó nó như là một sự lựa chọn đáng giá nhưng tại thời điểm này, với tốc độ phát triển của ứng dụng mã nguồn mở, đã có nhiều cái tên mới nhanh hơn, linh hoạt hơn ra đời.

Vì thế cho nên trong bài viết này, tôi sẽ thử làm theo những gì mà tác giả trong bài viết trên đã nói. Để xem việc di cư này có đáng hay không.

Trước tiên hãy gỡ (uninstall) oh-my-zsh. Mở tệp .zshrc và xoá dòng source $ZSH/oh-my-zsh.sh. Sau đó xoá thư mục ~/.oh-my-zsh.

rm -rf ~/.oh-my-zsh

Bắt đầu thôi nào!

starship

starship.rs là một công cụ tiện ích giúp tuỳ chỉnh shell, nó hỗ trợ rất nhiều shell, bao gồm cả zsh. Được viết bằng Rust mang đến tốc độ và độ an toàn, đáng tin cậy.

Cài đặt starship, rất đơn giản. Ở đây tôi dùng Mac, cài qua homebrew.

brew install starship

Nếu bạn dùng hệ điều hành khác, tham khảo cách cài đặt tại Starship Installing

Vì đang dùng zsh, nên tôi thêm dòng này vào cuối tệp ~/.zshrc

eval "$(starship init zsh)"

Starship hỗ trợ rất nhiều shell nên để tham khảo thêm, bạn đọc xem tại Setup Shell

Sau khi hoàn tất, tải lại cấu hình bằng cách gõ source ~/.zshrc bạn sẽ thấy giao diện mới.

Giao diện mặc định

Về tổng quan, starship cho phép bạn cấu hình nhiều tiện ích mở rộng trong cửa sổ lệnh. Ví dụ dưới đây là cửa sổ dòng lệnh của tôi sau một hồi cấu hình.

Giao diện tuỳ chỉnh

Còn đây là tệp cấu hình.

# ~/.config/starship.toml

"$schema" = 'https://starship.rs/config-schema.json'

add_newline = false

# Replace the '❯' symbol in the prompt with '➜'
[character] # The name of the module we are configuring is 'character'
success_symbol = '[➜](bold green)' # The 'success_symbol' segment is being set to '➜' with the color 'bold green'

[hostname]
ssh_only = true
format = '[$ssh_symbol$hostname]($style) '
ssh_symbol = "@"
style = "yellow"

[username]
disabled = false
show_always = true
format = '😨 [$user]($style) '
style_user = "yellow"

[directory]
truncation_length = 4
truncate_to_repo = false

[git_branch]
truncation_length = 20
# remove the 'on' conjunction
# format = '[$symbol$branch]($style) '

[git_state]
disabled = true

[git_status]
disabled = true

[memory_usage]
disabled = true
format = '$symbol [${ram}]($style) '
threshold = -1
symbol = " "
style = "bold dimmed green"

[time]
disabled = false
format = '🕙 [$time]($style) '
time_format = '%T'

[nodejs]
disabled = true

Ngoài ra còn rất nhiều cài đặt về ngôn ngữ và công cụ mà bạn có thể tìm thấy tại Config. Việc còn lại là tìm hiểu xem nó cho phép cài đặt hiển thị những gì rồi thêm vào tệp cấu hình là được.

fzf

fzf là một công cụ tìm kiếm mờ (fuzzy finder) đa năng. Nó được viết bằng C mang đến tốc độ tìm kiếm ấn tượng. Nhưng khoan đã, tại sao lại cần đến một công cụ tìm kiếm ở đây?

Thì thật ra mà nói nó giúp bạn tìm được tất cả mọi thứ trong máy tính. Ví dụ như tìm bất kỳ tệp tin, thư mục nào có trong hệ thống. Hoặc một ứng dụng mà tôi rất thường xuyên sử dụng là lục lại history của lệnh đã dùng trong hệ thống.

fzf hỗ trợ rất nhiều nền tảng, ở đây tôi cài thông qua brew

brew install fzf

Mở ~/.zshrc, thêm dòng này vào cuối

# Set up fzf key bindings and fuzzy completion
source <(fzf --zsh)

Chưa hình dung ra cách dùng ư? Hãy thử gõ fzf. Ngay lập tức công cụ tiến hành quét toàn bộ tệp tin trong máy tính và sẵn sàng cho tìm kiếm.

Hoặc dùng để tìm kiếm dựa trên đầu ra của lệnh khác, theo dạng pipe.

ls -lh | fzf

Bây giờ tìm kiếm lịch sử lệnh bằng cách bấm Ctrl + R. Gõ một số ký tự vào rồi bấm Enter.

zoxide

zoxide là một tiện ích thay thế cho lệnh cd truyền thống, nó có khả năng "nhớ" những đường dẫn mà bạn đã di chuyển vào, sau đó di chuyển nhanh đến thư mục đó bằng một lệnh đơn giản.

Cài đặt zoxide.

brew install zoxide

Thêm dòng này vào cuối ~/.zshrc

eval "$(zoxide init zsh)"

Cách dùng rất đơn giản, thay vì dùng cd thì dùng z.

z src/hoaitx/2coffee-next/page
z ~/src/hoaitx/2coffee-next/api

Điều thú vị là sau đó nếu muốn di chuyển vào thư mục page, chỉ cần gõ:

z page

Tiết kiệm được nhiều thời gian di chuyển phải không nào!

Một số plugin khác

Search history

Sau khi gỡ oh-my-zsh, tôi phát hiện ra rằng một tính năng mình rất hay dùng là bấm phím mũi tên lên/xuống để tìm nhanh lịch sử lệnh. Ví dụ bạn gõ rất nhiều lệnh docker rồi và chỉ muốn tìm những lệnh bắt đầu bằng docker run thì gõ docker run vào và bấm phím mũi tên, nó gợi ý ra tất cả lệnh bắt đầu bằng 2 từ đó.

Trong zsh có plugin tên là zsh-history-substring-search giúp làm được điều này.

Cài đặt.

brew install zsh-history-substring-search

Thêm các dòng này vào cuối tệp ~/.zshrc

# search history substring search
source ~/.zsh/zsh-history-substring-search/zsh-history-substring-search.zsh
bindkey '^[[A' history-substring-search-up
bindkey '^[[B' history-substring-search-down

Hai dòng bindkey là 2 nút mũi tên để dùng lệnh điều hướng tìm kiếm.

Auto suggestion

zsh-autosuggestions là một plugin gợi ý lệnh dựa trên lịch sử. Tưởng tượng bạn gõ một vài vài ký tự, nó sẽ tìm và gợi ý lệnh tiếp theo dựa trên những gì đã có trước đó. Sau đó chỉ cần tab tab...

Cài đặt.

brew install zsh-autosuggestions

Thêm dòng này vào cuối tệp ~/.zshrc

source $(brew --prefix)/share/zsh-autosuggestions/zsh-autosuggestions.zsh

Tổng kết

Trên đây là tất cả cài đặt mới của tôi sau khi rời bỏ oh-my-zsh. Đây có thể coi như là khởi đầu mới cho công cuộc tối ưu hoá shell của mình. Nếu tìm được "đồ chơi" mới, tôi sẽ tiếp tục cập nhật trong bài viết này.

Còn bạn, bạn đang sử dụng công cụ gì để làm mới shell của mình. Hãy để lại bình luận xuống phía dưới bài viết cho tôi và mọi người cùng biết nhé. Xin cảm ơn.

Cao cấp
Hello

Bí mật ngăn xếp của Blog

Là một lập trình viên, bạn có tò mò về bí mật công nghệ hay những khoản nợ kỹ thuật về trang blog này? Tất cả bí mật sẽ được bật mí ngay bài viết dưới đây. Còn chờ đợi gì nữa, hãy bấm vào ngay!

Là một lập trình viên, bạn có tò mò về bí mật công nghệ hay những khoản nợ kỹ thuật về trang blog này? Tất cả bí mật sẽ được bật mí ngay bài viết dưới đây. Còn chờ đợi gì nữa, hãy bấm vào ngay!

Xem tất cả

Đăng ký nhận thông báo bài viết mới

hoặc
* Bản tin tổng hợp được gửi mỗi 1-2 tuần, huỷ bất cứ lúc nào.

Bình luận (0)

Nội dung bình luận...