fzf - Command-line Fuzzy Finder
fzf เป็นเครื่องมือค้นหาแบบ fuzzy ทั่วไปสำหรับ command-line และ interactive terminal toolkit ที่เขียนด้วย Go ช่วยให้ผู้ใช้สามารถค้นหาและเลือกรายการจาก list ได้อย่างรวดเร็วด้วยการจับคู่แบบ fuzzy (ไม่ต้องตรงตัวอักษรทุกตัว) มีผู้ติดดาวบน GitHub กว่า 82,500 ดาว เหมาะสำหรับ developers, sysadmins และ power users ที่ต้องการเพิ่มประสิทธิภาพการทำงานบน command-line ใช้งานได้กับ shell workflow, Vim plugin และ script ต่างๆ โปรเจกต์ดูแลโดย junegunn และใช้สิทธิ์แบบ MIT
คัดมาจาก Telegram · อัปเดต 6 พ.ย. 2569
ดูโค้ดต้นทาง
มันคืออะไร
fzf เป็นเครื่องมือค้นหาแบบ fuzzy ทั่วไปสำหรับ command-line และ interactive terminal toolkit ที่เขียนด้วย Go ช่วยให้ผู้ใช้สามารถค้นหาและเลือกรายการจาก list ได้อย่างรวดเร็วด้วยการจับคู่แบบ fuzzy (คือการค้นหาที่ไม่ต้องตรงตัวอักษรทุกตัว แค่ตรงลำดับบางส่วนหรือคล้ายกันก็พอ) มีผู้ติดดาวบน GitHub กว่า 82,500 ดาว เป็นเครื่องมือยอดนิยมในการเพิ่มประสิทธิภาพการทำงานบน command-line โปรเจกต์ดูแลโดย junegunn และใช้สิทธิ์แบบ MIT
มันทำงานอย่างไร
fzf อ่าน input จาก stdin หรือไฟล์ แล้วแสดง interface แบบ interactive ที่ผู้ใช้สามารถพิมพ์คำค้นหาได้ มันใช้อัลกอริทึมการจับคู่แบบ fuzzy เพื่อกรองผลลัพธ์แบบ real-time ขณะที่คุณพิมพ์ หมายความว่าคุณไม่จำเป็นต้องตรงทุกตัวอักษร — ลำดับตัวอักษรบางส่วนหรือไม่เรียงลำดับก็สามารถหารายการที่เกี่ยวข้องได้
ตัวอย่างเช่น:
- ค้นหาไฟล์:
find . -type f | fzfจะแสดงไฟล์ทั้งหมดและให้คุณกรองด้วยการพิมพ์ - ค้นหา command history: กด
Ctrl+R(หลังติดตั้ง shell integration) เพื่อค้นหา command ที่เคยรัน - ค้นหา process:
ps aux | fzfเพื่อหาและเลือก process - เปลี่ยน directory:
cd $(find . -type d | fzf)เพื่อเลือก directory แบบ interactive
สามารถผูกเข้ากับ shell workflow (bash, zsh, fish), ใช้เป็น Vim plugin หรือฝังใน script ที่กำหนดเอง เครื่องมือนี้เขียนด้วย Go เพื่อประสิทธิภาพ และมี output mode กับตัวเลือกปรับแต่งต่างๆ ผ่าน command-line flags
เหมาะกับใคร
- Developers ที่ต้องค้นหาไฟล์, function, หรือ code snippet บ่อยๆ
- System administrators ที่ต้องจัดการ logs, processes, หรือ server lists จำนวนมาก
- Power users ที่ต้องการเพิ่มความเร็วในการทำงานบน terminal และลด keystrokes
- ผู้ที่ทำงานกับ command history, directory navigation, หรือข้อมูลขนาดใหญ่บน command-line
ข้อควรระวัง
- เส้นทางการเรียนรู้สำหรับฟีเจอร์ขั้นสูงและตัวเลือกปรับแต่งอาจต้องอ่านเอกสารประกอบ
- ประสิทธิภาพกับชุดข้อมูลขนาดใหญ่มาก (หลายล้านบรรทัด) อาจแตกต่างกันตามทรัพยากรของระบบ
- การผูกเข้ากับ shell หรือ editor เฉพาะต้องมีขั้นตอนการตั้งค่าเพิ่มเติม
โปรเจกต์ที่คล้ายกัน
- skim - fuzzy finder ที่เขียนด้วย Rust, ทางเลือกแทน fzf ที่มีฟังก์ชันคล้ายกัน (ข้อดี: compile เป็น binary เดียว, ข้อเสีย: community เล็กกว่า)
- peco - เครื่องมือกรองแบบ interactive ที่เรียบง่าย เขียนด้วย Go (เหมาะสำหรับผู้ที่ต้องการ interface ที่เรียบง่ายกว่า)
- percol - เครื่องมือ interactive grep ที่เขียนด้วย Python (ต้องการ Python runtime)
- selecta - ตัวเลือกข้อความแบบ fuzzy ที่เขียนด้วย Ruby สำหรับไฟล์และอื่นๆ (ต้องการ Ruby runtime)
- fzy - ตัวเลือกข้อความแบบ fuzzy ที่เร็วและเรียบง่าย พร้อมอัลกอริทึมให้คะแนนขั้นสูง (เน้นความเร็วและความแม่นยำในการให้คะแนน)
- telescope.nvim - fuzzy finder ที่ขยายได้สูงสำหรับ Neovim (เฉพาะสำหรับผู้ใช้ Neovim)
ความแตกต่างหลัก: fzf มี community ใหญ่ที่สุด, รองรับหลาย platform, และมี integration กับเครื่องมืออื่นมากที่สุด
ขั้นตอนถัดไป
- เข้าชม GitHub repository เพื่อเรียนรู้การใช้งานเบื้องต้น: https://github.com/junegunn/fzf
- ติดตั้ง fzf ด้วย install script:
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf && ~/.fzf/installหรือผ่าน package manager เช่นbrew install fzf(macOS),apt install fzf(Ubuntu) - ลองใช้ทันทีหลังติดตั้ง:
ls | fzfหรือกดCtrl+Rเพื่อค้นหา command history - อ่าน ADVANCED.md สำหรับตัวเลือกการตั้งค่าและรูปแบบการใช้งานขั้นสูง เช่น custom key bindings, preview window
- สำรวจตัวอย่างการผูกเข้ากับ shell สำหรับ key bindings ใน bash/zsh:
Ctrl+T(file search),Alt+C(cd to directory) - ตรวจสอบ README-VIM.md หากสนใจการผูกเข้ากับ Vim/Neovim เพื่อใช้ fzf ค้นหาไฟล์, buffer, หรือ command ภายใน editor


