4 คะแนน โดย justn 26 일 전 | 3 ความคิดเห็น | แชร์ทาง WhatsApp

ขอมาแชร์ไซด์โปรเจกต์ 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

ตอนนี้มันยังเป็นไซด์โปรเจกต์เล็ก ๆ ที่ค่อนข้างดิบอยู่ แต่ถ้าเป็นคนที่ต้องพิมพ์คำสั่งเดิมซ้ำ ๆ บนเทอร์มินัลทุกวัน ก็น่าจะรู้สึกถึงประโยชน์ได้ทันที เลยอยากเอามาแชร์ครับ

GitHub: https://github.com/bssm-oss/ganbatte

3 ความคิดเห็น

 
recast7838 19 일 전

ขอบคุณครับ

 
runableapp 26 일 전

ไอเดียดีมากครับ

 
justn 25 일 전

ขอบคุณครับ