5 คะแนน โดย GN⁺ 2023-12-01 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

สรุป: แนะนำเครื่องมือค้นหาบนบรรทัดคำสั่งตัวใหม่ ripgrep

  • ripgrep เป็นเครื่องมือค้นหาบนบรรทัดคำสั่งตัวใหม่ที่ผสานความสะดวกในการใช้งานของ The Silver Searcher เข้ากับประสิทธิภาพของ GNU grep
  • มีไบนารีสำหรับ Linux, Mac และ Windows และเขียนด้วย Rust
  • โดดเด่นทั้งด้านประสิทธิภาพและความแม่นยำในการค้นหาไฟล์เดี่ยวและไดเรกทอรีขนาดใหญ่
  • รองรับ Unicode ได้ยอดเยี่ยม และโดยทั่วไปเร็วกว่าเครื่องมือที่ใช้ memory map

แนะนำ ripgrep

ข้อดี

  • เร็วกว่าเครื่องมือค้นหาอื่น ๆ และจะไม่ค้นหาไฟล์ที่ถูกละเว้นโดย .gitignore
  • มีความสามารถในการค้นหาเฉพาะประเภทไฟล์ที่กำหนด หรือยกเว้นบางประเภท
  • รองรับฟีเจอร์จำนวนมากของ grep และรองรับ Unicode เสมอ
  • สามารถเลือกใช้เอนจิน regular expression แบบ PCRE2 ได้
  • รองรับการค้นหาไฟล์บีบอัดและข้อความหลายรูปแบบการเข้ารหัส
  • รองรับตัวกรอง preprocessor สำหรับอินพุตแบบกำหนดเอง

ข้อโต้แย้ง

  • ไม่เป็นไปตามมาตรฐาน POSIX และไม่ได้ใช้กันทั่วไปเท่า grep
  • อาจไม่มีฟีเจอร์เฉพาะบางอย่างหรือบั๊กบางแบบจากเครื่องมืออื่นใน ripgrep
  • ในบาง edge case ด้านประสิทธิภาพ ripgrep อาจช้ากว่าเครื่องมืออื่น

การติดตั้ง

  • ชื่อไบนารีของ ripgrep คือ rg และสามารถติดตั้งได้บนหลายแพลตฟอร์ม
  • มีวิธีติดตั้งผ่าน Homebrew, Archlinux และสำหรับโปรแกรมเมอร์ Rust
  • สามารถ build จากซอร์สได้โดยตรงเช่นกัน

ทัวร์แบบรวดเร็ว

  • การใช้งาน ripgrep ผ่านบรรทัดคำสั่งไม่ได้ต่างจากเครื่องมือประเภทเดียวกันมากนัก
  • รองรับการแสดงผลในเทอร์มินัล สี และหมายเลขบรรทัดโดยอัตโนมัติ
  • สามารถค้นหาได้ด้วยตัวเลือกและแพตเทิร์นที่หลากหลาย

โครงสร้างของ ripgrep

พื้นหลัง

  • อธิบายทั้งความแตกต่างและจุดร่วมของเครื่องมือกลุ่มลูกหลานของ grep และ ack
  • ripgrep ผสานความสามารถของ grep ในการค้นหาไฟล์ขนาดใหญ่เข้ากับค่าเริ่มต้นการค้นหาแบบ "อัจฉริยะ" ของ ack

การเตรียมค้นหาไฟล์

  • การใช้ตัววนซ้ำไดเรกทอรีที่รวดเร็วและการกรองพาธไฟล์เป็นสิ่งสำคัญ
  • การใช้กฎจากไฟล์ .gitignore อย่างรวดเร็วส่งผลต่อประสิทธิภาพ

การค้นหา

  • เอนจิน regular expression ที่รวดเร็วและการปรับแต่ง literal optimization มีความสำคัญ
  • ค้นหาในบัฟเฟอร์ขนาดใหญ่ทีเดียว แทนการค้นหาแยกทีละบรรทัดทั้งไฟล์

เอาต์พุต

  • เขียนผลการค้นหาลงในบัฟเฟอร์หน่วยความจำ แล้ว serialize ออกไปยัง stdout

วิธีการ

ภาพรวม

  • มุ่งเน้นไปที่ปัญหาที่ผู้ใช้พยายามแก้ และพยายามทำ benchmark อย่างเป็นธรรม
  • ทำ benchmark กับเครื่องมือหลายตัว และเปรียบเทียบโดยคำนึงถึงความแตกต่างของพฤติกรรมเริ่มต้นของแต่ละตัว

ความเห็นของ GN⁺

สิ่งสำคัญที่สุดของบทความนี้คือการอธิบายอย่างละเอียดว่า ripgrep มีข้อดีอะไรบ้างเมื่อเทียบกับเครื่องมือค้นหาเดิม ๆ โดยเฉพาะเรื่องความเร็ว การรองรับ Unicode และการรองรับรูปแบบไฟล์กับการเข้ารหัสที่หลากหลาย ซึ่งล้วนเป็นเหตุผลที่ดึงดูดผู้ใช้ได้ บทความนี้น่าสนใจเพราะช่วยให้เข้าใจว่าเครื่องมือใหม่แตกต่างจากเครื่องมือเดิมอย่างไร และความแตกต่างนั้นอาจส่งผลต่อผู้ใช้จริงอย่างไร

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

 
GN⁺ 2023-12-01
ความคิดเห็นบน Hacker News
  • การจับคู่ระหว่าง ripgrep กับ fzf เร็วมาก และมีตัวอย่างฟังก์ชัน Powershell ที่ใช้แนวทางนี้ ฟังก์ชันนี้จะค้นหาด้วย ripgrep ก่อน จากนั้นใช้ fzf เพื่อค้นหาแบบฟัซซี และใช้ bat เพื่อแสดงบริบทของผลลัพธ์ วิธีนี้มีประโยชน์สำหรับการหาตำแหน่งของเนื้อหาเฉพาะอย่างรวดเร็วในโปรเจ็กต์หลายรีโพซิทอรี
  • มีการแนะนำวิธีใช้ ripgrep ผ่านแพ็กเกจ project.el และแพ็กเกจ dumb-jump ของ Emacs โดย dumb-jump จะจำกัดขอบเขตการค้นหาให้ตรงกับชนิดไฟล์ปัจจุบันภายในไดเรกทอรีของโปรเจ็กต์โดยอัตโนมัติ และยังรองรับ ag ซึ่งเป็นอีกเครื่องมือที่รวดเร็วด้วย
  • เป็นเรื่องน่าสนใจที่ ripgrep ให้ความสามารถการค้นหาของ VS Code ผ่าน Node.js wrapper
  • ผู้ใช้ ripgrep มองว่าเหตุผลหลักที่เลือกใช้แทน grep คือใช้งานง่ายกว่าและเร็วกว่า โดยเฉพาะฟีเจอร์ที่นำกฎ gitignore มาใช้โดยอัตโนมัติซึ่งมีประโยชน์มาก
  • มีการกล่าวว่าเครื่องมือทดแทน grep แบบขนานอย่าง ripgrep และ ag เร็วกว่า grep มากอยู่แล้ว จึงไม่ควรใช้ความต่างด้านความเร็วเป็นเกณฑ์หลักนัก และควรประเมินกันด้วยวิธีอื่น
  • มีการชี้ว่าการประกาศเปิดตัวครั้งแรกของ ripgrep คือในปี 2016 และเสนอว่าควรใส่ปีไว้ในชื่อเรื่อง
  • มีการกล่าวถึงว่า qgrep ใช้อินเด็กซ์เพื่อให้ความเร็วสูง แต่เมื่อจำเป็นต้องจับคู่ UTF8 แบบหลายบรรทัด ripgrep อาจช้าลงได้
  • มีการแชร์เวิร์กโฟลว์ที่สะดวกสำหรับการแก้ไขทั้งโปรเจ็กต์ผ่านแพ็กเกจ Consult ที่ใช้ ripgrep ภายใน Emacs
  • มีข้อมูลว่าเวอร์ชัน ripgrep-all สามารถทำงานกับเอกสารชนิดอื่นได้ด้วย เช่น ไฟล์ PDF และ doc
  • มีการตั้งคำถามว่าทำไม grep ถึงยังไม่ถูกแทนที่หรือปรับปรุง และมองว่าหัวข้อนี้ค่อนข้างเก่าแล้ว