Go to file
2024-07-23 01:16:29 +02:00
src fix: remove extra line return at end of output 2024-07-23 01:16:29 +02:00
.gitignore first commit 2024-07-21 01:56:54 +02:00
Cargo.lock fix: remove extra line return at end of output 2024-07-23 01:16:29 +02:00
Cargo.toml fix: remove extra line return at end of output 2024-07-23 01:16:29 +02:00
README.md feat: disregard gitignore flag 2024-07-22 21:32:16 +02:00

Grip-grab 🧤

A circumstancially faster, more lightweight, ripgrep-inspired alternative.

 gg "\b(Read|Write)Half[^<]" tokio/src

https://github.com/user-attachments/assets/bef374b0-6b71-408f-80e4-b43d388d6af5

Installation

Using Cargo

cargo install grip-grab

NOTE: if using zsh with the git plugin, you might need to unalias gg in order for grip-grab's gg to work:

echo 'unalias gg' >> ~/.zshrc
source ~/.zshrc

Usage

 gg --help
A somewhat faster, more lightweight, ripgrep-inspired alternative.

Usage: gg [OPTIONS] <PATTERN|--patterns <PATTERNS>> <PATH>

Arguments:
  [PATTERN]  a regex pattern to search for
  <PATH>     path in which to search recursively

Options:
  -e, --patterns <PATTERNS>
          you can specify multiple patterns using -e "pattern1" -e "pattern2" etc
  -I, --ignore-paths <IGNORE_PATHS>
          paths to ignore when recursively walking target directory
  -G, --disregard-gitignore
          disregard .gitignore rules when recursively walking directory (defaults to false)
  -M, --max-results <MAX_RESULTS>
          upper boundary for the number of results to expect (will panic if #results > max_results) [default: 1000]
  -T, --n-threads <N_THREADS>
          number of threads to use [default: 4]
  -U, --multiline
          enable multiline matching
      --json
          output in JSON format
  -f, --file-paths-only
          output file paths only
  -A, --absolute-paths
          output absolute paths (defaults to relative)
  -C, --disable-colored-output
          disable colored output (colored by default)
  -t, --filter-filetypes <FILTER_FILETYPES>
          filter on filetype (defaults to all filetypes)
  -h, --help
          Print help
  -V, --version
          Print version

Examples

Basic usage

 gg "for" .
Screenshot 2024-07-21 at 16 21 25

JSON output

 gg "impl" . --json | jq
{
  "path": "/somewhere/gg/src/search.rs",
  "results": [
    {
      "line_number": 23,
      "line": "impl fmt::Display for FileResults {\n"
    },
    {
      "line_number": 33,
      "line": "impl FileResults {\n"
    },
    {
      "line_number": 43,
      "line": "impl<'a> IntoIterator for &'a FileResults {\n"
    }
  ]
}
{
  "path": "/somewhere/gg/src/printer.rs",
  "results": [
    {
      "line_number": 17,
      "line": "impl Printer {\n"
    }
  ]
}

Filenames only

 gg "for" . -f
Screenshot 2024-07-21 at 16 29 27

Notes

This lightweight utility is largely based on a couple of crates from the extraordinary ripgrep tool. Its aim is to provide a minimal and lightweight version that can be easily integrated in other programs for search-related purproses.