Tôi đã tạo một CLI tìm các lệnh lặp lại trong shell history và chuyển chúng thành alias/workflow
(github.com/bssm-oss)Tôi muốn chia sẻ một side project CLI nhỏ mà tôi đã làm trong vài ngày qua.
Shell alias rất tuyệt. Nhanh, đơn giản và dùng quen tay.
Nhưng tôi nghĩ kiểu cứ tiếp tục nhét alias vào .zshrc thì không bền lâu.
Lúc đầu thì ổn.
alias gs='git status -sb'
alias dc='docker compose'
Vấn đề là nó cứ ngày càng nhiều lên.
Git alias, docker alias, pnpm alias, ssh alias, rồi alias theo từng dự án đều chất đống trong một file, đến lúc sau thì tôi còn quên cả mình đã tạo gì.
Alias rõ ràng được tạo ra để tăng năng suất, nhưng đến một lúc nào đó lại biến thành bài kiểm tra trí nhớ.
Điều đáng tiếc hơn là shell history.
Các lệnh và chuỗi lệnh mà tôi gõ lặp đi lặp lại đã tích lại sẵn trong history. Nhưng phần lớn shell chỉ để đó như bản ghi quá khứ mà thôi.
Vì vậy tôi đã tạo ra ganbatte. Tên binary là gnb.
ganbatte là một CLI phân tích shell history để gợi ý các lệnh lặp lại thành ứng viên alias, còn các chuỗi lệnh lặp lại thành ứng viên workflow.
brew install bssm-oss/tap/ganbatte
gnb suggest # Tìm các lệnh lặp lại và ứng viên workflow
gnb migrate # Nhập các shell alias hiện có
gnb # Duyệt trong TUI
Ví dụ sẽ như thế này.
=== Alias Suggestions ===
1. c = claude
Used 5 times · saves ~25 keystrokes
=== Workflow Suggestions ===
1. git-add
Step 1: git add .
Step 2: git commit -m "update"
Step 3: git push
Applying all suggestions would save ~89 keystrokes based on your history.
Nếu Atuin giỏi ghi nhớ “tôi đã nhập gì”, thì ganbatte gần hơn với việc biến “những gì tôi nhập lặp lại” thành các lệnh có thể tiếp tục sử dụng.
Bạn cũng có thể nhập các alias hiện có.
gnb migrate
Nếu chạy mà không có đối số, bạn có thể tìm kiếm và chạy alias cùng workflow trong TUI.
gnb
Bạn có thể tách riêng alias toàn cục và .ganbatte.toml theo từng dự án, đồng thời cũng có thể thêm prompt xác nhận cho các lệnh nguy hiểm.
[alias.nuke]
cmd = "git reset --hard HEAD"
confirm = true
Điểm quan trọng là mọi thứ đều chạy cục bộ.
Shell history hay track log không bị gửi lên server. Cũng không có telemetry, tài khoản, cloud sync hay tạo lệnh bằng AI.
Đây vẫn là một side project nhỏ và còn hơi thô, nhưng nếu bạn là người mỗi ngày đều lặp đi lặp lại các lệnh giống nhau trong terminal, tôi nghĩ bạn sẽ cảm nhận được giá trị của nó ngay, nên tôi muốn chia sẻ.
3 bình luận
Cảm ơn bạn
Ý tưởng hay đấy.
Cảm ơn bạn