You should try ripgrep

You should try ripgrep

Rip grep (rg) is the last searcher from the whole contest of “which is the fastest searcher in the terminal?”. grep > Ack > ag (the_silver_surfer) > rg from slowest to fastest.

Rip Grep is written in Rust, but what’s so good about it is that is respects the .gitignore and automatically skips hidden files/directories and binary files, making it have to search for fewer files, which is why it’s faster than alternatives.

It uses Rust’s regex engine by default, alternatively you can use the flag --pcre2 to use PCRE2 regex engine.

It has sensible defaults when you run it in a terminal, making it very similar to ag in that regard, here is an example of the results of a search:

$ rg def
main.py
13:def new_lorry():
20:def Truck(truckNo):
37:def maybe_add():
44:def update():
65:def draw():

app/queue.py
6:    def __init__(self, size, delay_range=None, feeder_queue=None):
14:    def length(self):
17:    def update_delay_range(self, delay_range):
22:    def handle_new(self):
27:    def add(self, item):
37:    def pop(self):
42:    def check_complete(self):

You can’t see the colors, but they are enabled as default. Along with line numbers and the file path.

You can (and should) integrate it with vim with the --vimgrep flag, with fzf by using it as the default searcher.

Another very useful flag is the --hidden which makes rg also search inside hidden files and folders.