5 điểm bởi GN⁺ 2023-12-01 | 1 bình luận | Chia sẻ qua WhatsApp

Tóm tắt: giới thiệu công cụ tìm kiếm dòng lệnh mới ripgrep

  • ripgrep là một công cụ tìm kiếm dòng lệnh mới kết hợp tính tiện dụng của The Silver Searcher với hiệu năng của GNU grep.
  • Cung cấp binary cho Linux, macOS và Windows, được viết bằng Rust.
  • Vượt trội về hiệu năng và độ chính xác khi tìm kiếm trên một tệp đơn lẻ cũng như trong các thư mục lớn.
  • Hỗ trợ Unicode xuất sắc và nhìn chung nhanh hơn các công cụ dùng memory map.

Giới thiệu ripgrep

Ưu điểm

  • Nhanh hơn các công cụ tìm kiếm khác và không tìm trong các tệp bị bỏ qua bởi .gitignore.
  • Cung cấp khả năng chỉ tìm trong một số loại tệp nhất định hoặc loại trừ chúng.
  • Hỗ trợ nhiều tính năng của grep và luôn hỗ trợ Unicode.
  • Có thể tùy chọn dùng engine biểu thức chính quy PCRE2.
  • Hỗ trợ nhiều kiểu mã hóa văn bản và tìm kiếm trong các tệp nén.
  • Hỗ trợ bộ lọc tiền xử lý đầu vào tùy ý.

Ý kiến phản đối

  • Không tuân thủ tiêu chuẩn POSIX và không phổ biến bằng grep.
  • Có thể thiếu một số tính năng hoặc lỗi cụ thể vốn có ở các công cụ khác mà ripgrep không có.
  • Trong một số trường hợp biên về hiệu năng, ripgrep có thể chậm hơn công cụ khác.

Cài đặt

  • Tên binary của ripgreprg và có thể cài đặt trên nhiều nền tảng.
  • Có hướng dẫn cài đặt qua Homebrew, Archlinux và cho lập trình viên Rust.
  • Cũng có thể tự build từ mã nguồn.

Tham quan nhanh

  • Cách dùng dòng lệnh của ripgrep không khác nhiều so với các công cụ tương tự khác.
  • Tự động hỗ trợ đầu ra terminal, màu sắc, hiển thị số dòng, v.v.
  • Có thể tìm kiếm bằng nhiều tùy chọn và mẫu khác nhau.

Cấu trúc của ripgrep

Bối cảnh

  • Giải thích điểm khác biệt và điểm chung giữa grep và các công cụ hậu duệ của ack.
  • ripgrep kết hợp khả năng tìm kiếm trên tệp lớn của grep với thiết lập mặc định tìm kiếm "thông minh" của ack.

Chuẩn bị tìm kiếm tệp

  • Việc dùng bộ lặp thư mục nhanh và lọc đường dẫn tệp là rất quan trọng.
  • Áp dụng nhanh các quy tắc trong tệp .gitignore ảnh hưởng đến hiệu năng.

Tìm kiếm

  • Engine biểu thức chính quy nhanh và tối ưu hóa literal là rất quan trọng.
  • Không tìm theo từng dòng hay trên toàn bộ tệp, mà tìm trong các buffer lớn cùng lúc.

Đầu ra

  • Ghi kết quả tìm kiếm vào buffer bộ nhớ rồi tuần tự hóa và xuất ra stdout.

Phương pháp luận

Tổng quan

  • Tập trung vào vấn đề mà người dùng muốn giải quyết và cố gắng thực hiện benchmark công bằng.
  • Benchmark nhiều công cụ và so sánh có tính đến sự khác biệt trong hành vi mặc định của từng công cụ.

Ý kiến của GN⁺

Điểm quan trọng nhất của bài viết này là nó giải thích chi tiết những ưu điểm mà ripgrep có khi so với các công cụ tìm kiếm hiện có. Đặc biệt, hiệu năng nhanh, hỗ trợ Unicode và khả năng hỗ trợ nhiều định dạng tệp cũng như kiểu mã hóa là những lý do có thể hấp dẫn người dùng. Điều khiến bài viết này thú vị là nó giúp hiểu công cụ mới khác gì so với các công cụ hiện có, và sự khác biệt đó có thể ảnh hưởng thế nào đến người dùng thực tế.

1 bình luận

 
GN⁺ 2023-12-01
Ý kiến trên Hacker News
  • Sự kết hợp giữa ripgrep và fzf rất nhanh, và có đưa ra ví dụ về một hàm Powershell tận dụng cách này. Hàm này tìm kiếm bằng ripgrep, sau đó dùng fzf để tìm kiếm mờ, rồi hiển thị ngữ cảnh của kết quả qua bat. Cách làm này hữu ích để nhanh chóng tìm vị trí của nội dung cụ thể trong các dự án có nhiều repository.
  • Có giới thiệu cách tận dụng ripgrep bằng gói project.el và gói dumb-jump của Emacs. dumb-jump tự động giới hạn phạm vi tìm kiếm cho kiểu tệp hiện tại trong một thư mục dự án cụ thể, và cũng hỗ trợ một công cụ nhanh khác là ag.
  • Việc ripgrep cung cấp tính năng tìm kiếm của VS Code thông qua một wrapper Node.js là một điều thú vị.
  • Người dùng ripgrep cho biết lý do chính để dùng nó thay cho grep là dễ sử dụng hơn và nhanh hơn, đặc biệt họ thấy hữu ích ở tính năng tự động áp dụng các quy tắc gitignore.
  • Có ý kiến cho rằng các công cụ thay thế grep được song song hóa như ripgrep và ag nhanh hơn grep rất nhiều, nên chênh lệch tốc độ không còn là tiêu chí quyết định lớn và cần đánh giá chúng theo những cách khác.
  • Có người chỉ ra rằng lần công bố ban đầu của ripgrep là vào năm 2016, và đề xuất nên ghi năm trong tiêu đề.
  • Có nhắc đến qgrep dùng chỉ mục để đạt tốc độ nhanh, nhưng khi cần khớp nhiều dòng UTF8 thì ripgrep có thể chậm đi.
  • Có người chia sẻ một quy trình làm việc tiện lợi để chỉnh sửa trên toàn bộ dự án thông qua gói Consult dùng ripgrep bên trong Emacs.
  • Có thông tin rằng phiên bản ripgrep-all cũng hoạt động với các kiểu tài liệu khác như tệp PDF và doc.
  • Có người đặt câu hỏi vì sao grep vẫn chưa được thay thế hoặc cải tiến, đồng thời nhận xét rằng chủ đề này đã khá cũ.