ผมสร้าง CLI ที่ค้นหาคำสั่งที่ใช้ซ้ำใน shell history แล้วเปลี่ยนให้เป็น alias/workflow
(github.com/bssm-oss)ขอมาแชร์ไซด์โปรเจกต์ CLI เล็ก ๆ ที่ทำในช่วงไม่กี่วันที่ผ่านมา
shell alias เป็นสิ่งที่ดี ใช้ได้เร็ว เรียบง่าย และคุ้นมือ
แต่ผมรู้สึกว่าวิธีเอา alias ไปยัดไว้ใน .zshrc เรื่อย ๆ มันไปได้ไม่ไกลนัก
ช่วงแรกมันก็โอเค
alias gs='git status -sb'
alias dc='docker compose'
ปัญหาคือมันเพิ่มขึ้นเรื่อย ๆ
ทั้ง git alias, docker alias, pnpm alias, ssh alias รวมถึง alias เฉพาะแต่ละโปรเจกต์ต่างก็ไปกองอยู่ในไฟล์เดียวกัน แล้วสุดท้ายผมก็ลืมไปด้วยซ้ำว่าตัวเองเคยตั้งอะไรไว้บ้าง
alias ถูกสร้างมาเพื่อเพิ่มประสิทธิภาพการทำงานแท้ ๆ แต่พอถึงจุดหนึ่งมันกลับกลายเป็นแบบทดสอบความจำ
อีกอย่างที่น่าเสียดายก็คือ shell history
คำสั่งและลำดับคำสั่งที่ผมพิมพ์ซ้ำ ๆ นั้นสะสมอยู่ใน history อยู่แล้ว แต่ shell ส่วนใหญ่ก็ปล่อยให้มันเป็นแค่บันทึกของอดีตเท่านั้น
เพราะแบบนั้นผมจึงสร้าง ganbatte ขึ้นมา โดยชื่อไบนารีคือ gnb
ganbatte เป็น CLI ที่วิเคราะห์ shell history เพื่อแนะนำคำสั่งที่ใช้ซ้ำเป็นตัวเลือก alias และแนะนำลำดับคำสั่งที่เกิดซ้ำเป็นตัวเลือก workflow
brew install bssm-oss/tap/ganbatte
gnb suggest # ค้นหาคำสั่งที่ใช้ซ้ำและตัวเลือก workflow
gnb migrate # นำเข้า shell alias เดิม
gnb # สำรวจผ่าน TUI
ตัวอย่างจะหน้าตาประมาณนี้
=== 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.
ถ้า Atuin เก่งเรื่องช่วยจำว่า “ผมเคยพิมพ์อะไรไปบ้าง” ganbatte ก็จะใกล้เคียงกับการเปลี่ยน “สิ่งที่ผมพิมพ์ซ้ำ ๆ” ให้กลายเป็นคำสั่งที่หยิบมาใช้ต่อได้เรื่อย ๆ
และยังนำเข้า alias เดิมได้ด้วย
gnb migrate
ถ้ารันโดยไม่ใส่อาร์กิวเมนต์ ก็จะสามารถค้นหาและรัน alias กับ workflow ได้ผ่าน TUI
gnb
สามารถแยกใช้ global alias กับ .ganbatte.toml ระดับโปรเจกต์ได้ และยังใส่พรอมป์ตยืนยันสำหรับคำสั่งที่อันตรายได้ด้วย
[alias.nuke]
cmd = "git reset --hard HEAD"
confirm = true
จุดสำคัญคือทั้งหมดนี้ทำงานอยู่บนเครื่องโลคัลทั้งหมด
ไม่มีการส่ง shell history หรือ track log ไปยังเซิร์ฟเวอร์ ไม่มี telemetry ไม่มีบัญชีผู้ใช้ ไม่มี cloud sync และไม่มีการสร้างคำสั่งด้วย AI
ตอนนี้มันยังเป็นไซด์โปรเจกต์เล็ก ๆ ที่ค่อนข้างดิบอยู่ แต่ถ้าเป็นคนที่ต้องพิมพ์คำสั่งเดิมซ้ำ ๆ บนเทอร์มินัลทุกวัน ก็น่าจะรู้สึกถึงประโยชน์ได้ทันที เลยอยากเอามาแชร์ครับ
3 ความคิดเห็น
ขอบคุณครับ
ไอเดียดีมากครับ
ขอบคุณครับ