Initial commit
This commit is contained in:
45
skills/ripgrep/SKILL.md
Normal file
45
skills/ripgrep/SKILL.md
Normal file
@@ -0,0 +1,45 @@
|
||||
---
|
||||
name: ripgrep
|
||||
description: Efficient text search using ripgrep (rg) with one-shot patterns that minimize iterations by getting files, line numbers, and context in a single call
|
||||
---
|
||||
|
||||
# ripgrep: Powerful, one-shot text search
|
||||
|
||||
## Default Strategy
|
||||
|
||||
**For content search: use Bash(rg) with `-e 'pattern' -n -C 2` for one-shot results.**
|
||||
|
||||
This gives files, line numbers, and context in a single call - minimizes iterations and context usage.
|
||||
|
||||
Always prefer getting line numbers and surrounding context over multiple search attempts.
|
||||
|
||||
## Tool Selection
|
||||
|
||||
**Grep tool** (built on ripgrep) - Use for structured searches:
|
||||
- Basic pattern matching with structured output
|
||||
- File type filtering with `type` parameter
|
||||
- When special flags like `-F`, `-v`, `-w`, or pipe composition are not needed
|
||||
- Handles 95% of search needs
|
||||
|
||||
**Bash(rg)** - Use for one-shot searches needing special flags or composition:
|
||||
- Fixed string search (`-F`)
|
||||
- Invert match (`-v`)
|
||||
- Word boundaries (`-w`)
|
||||
- Context lines with patterns (`-n -C 2`)
|
||||
- Pipe composition (`| head`, `| wc -l`, `| sort`)
|
||||
- Default choice for efficient one-shot results
|
||||
|
||||
**Glob tool** - Use for file name/path matching only (not content search)
|
||||
|
||||
## When to Load Detailed Reference
|
||||
|
||||
Load [ripgrep guide](./reference/ripgrep-guide.md) when needing:
|
||||
- One-shot search pattern templates
|
||||
- Effective flag combinations for complex searches
|
||||
- Pipe composition patterns
|
||||
- File type filters reference (`-t` flags)
|
||||
- Pattern syntax examples
|
||||
- Translation between Grep tool and rg commands
|
||||
- Performance optimization for large result sets
|
||||
|
||||
The guide focuses on practical patterns for getting targeted results in minimal calls.
|
||||
326
skills/ripgrep/reference/ripgrep-guide.md
Normal file
326
skills/ripgrep/reference/ripgrep-guide.md
Normal file
@@ -0,0 +1,326 @@
|
||||
# ripgrep Search Patterns Reference
|
||||
|
||||
Practical search patterns for efficient one-shot searches with ripgrep.
|
||||
|
||||
# One-Shot Search Strategy
|
||||
|
||||
**Goal: Get files + line numbers + context in ONE call.**
|
||||
|
||||
## The Primary Pattern
|
||||
|
||||
```bash
|
||||
rg -n -C 2 -t TYPE -e 'pattern'
|
||||
```
|
||||
|
||||
**What this gives:**
|
||||
- `-n` - Line numbers
|
||||
- `-C 2` - 2 lines context before/after
|
||||
- `-t TYPE` - File type filter
|
||||
- `-e 'pattern'` - The search pattern
|
||||
|
||||
**Use this as the default.** Adjust only when needed.
|
||||
|
||||
---
|
||||
|
||||
# Essential Flag Combinations
|
||||
|
||||
## 1. Standard Search with Context
|
||||
```bash
|
||||
rg -n -C 2 -t js -e 'functionName'
|
||||
```
|
||||
Most common pattern - gives everything needed.
|
||||
|
||||
## 2. Fixed String (Literal) Search
|
||||
```bash
|
||||
rg -F -n -C 2 -t js -e 'exact.string.with.dots'
|
||||
```
|
||||
Use `-F` when pattern has regex special chars (`.` `*` `(` `)` etc.)
|
||||
**Avoids regex escaping hell.**
|
||||
|
||||
## 3. Word Boundary (Precise) Search
|
||||
```bash
|
||||
rg -w -n -C 2 -t js -e 'variable'
|
||||
```
|
||||
`-w` matches whole words only. Finds "variable" but not "variableName".
|
||||
|
||||
## 4. Case-Insensitive Search
|
||||
```bash
|
||||
rg -i -n -C 2 -t js -e 'pattern'
|
||||
```
|
||||
`-i` for case-insensitive matching.
|
||||
|
||||
## 5. List Files Only (Quick Overview)
|
||||
```bash
|
||||
rg -l -t js -e 'pattern' | head -20
|
||||
```
|
||||
`-l` lists filenames only. Pipe to `head` to limit.
|
||||
|
||||
## 6. Count Matches
|
||||
```bash
|
||||
rg -c -t js -e 'pattern'
|
||||
```
|
||||
`-c` shows count per file.
|
||||
|
||||
## 7. Invert Match (Find Files WITHOUT Pattern)
|
||||
```bash
|
||||
rg -l -t js -e 'import React' | rg -v -F -e 'import { useState }'
|
||||
```
|
||||
First find files with React, then filter out files with useState.
|
||||
|
||||
Or simpler:
|
||||
```bash
|
||||
rg -L -t js -e 'pattern'
|
||||
```
|
||||
`-L` lists files that do NOT match.
|
||||
|
||||
## 8. Multiple Patterns (OR Logic)
|
||||
```bash
|
||||
rg -n -C 2 -t js -e 'pattern1' -e 'pattern2'
|
||||
```
|
||||
Matches either pattern.
|
||||
|
||||
## 9. Specific Directory
|
||||
```bash
|
||||
rg -n -C 2 -t js -e 'pattern' src/components
|
||||
```
|
||||
Add directory path at end to narrow scope.
|
||||
|
||||
---
|
||||
|
||||
# Pipe Composition Patterns
|
||||
|
||||
## Limit Results
|
||||
```bash
|
||||
rg -n -t js -e 'pattern' | head -30
|
||||
```
|
||||
Get first 30 result lines.
|
||||
|
||||
## Count Total Matches
|
||||
```bash
|
||||
rg -n -t js -e 'pattern' | wc -l
|
||||
```
|
||||
|
||||
## Sort and Deduplicate
|
||||
```bash
|
||||
rg -o -t js -e 'import.*from.*' | sort | uniq
|
||||
```
|
||||
`-o` shows only matching part. Useful for extracting patterns.
|
||||
|
||||
## Filter Results Further
|
||||
```bash
|
||||
rg -n -t js -e 'function' | rg -e 'export'
|
||||
```
|
||||
Find functions, then filter to only exported ones.
|
||||
|
||||
---
|
||||
|
||||
# File Type Filters (-t)
|
||||
|
||||
**Common types:**
|
||||
- `-t js` - JavaScript (.js, .jsx, .mjs, .cjs, .vue)
|
||||
- `-t ts` - TypeScript (.ts, .tsx, .cts, .mts)
|
||||
- `-t py` - Python (.py, .pyi)
|
||||
- `-t go` - Go (.go)
|
||||
- `-t rust` - Rust (.rs)
|
||||
- `-t java` - Java (.java, .jsp, .properties)
|
||||
- `-t ruby` - Ruby (.rb, .gemspec, Gemfile, Rakefile)
|
||||
- `-t c` - C (.c, .h)
|
||||
- `-t cpp` - C++ (.cpp, .hpp, .cc, .hh)
|
||||
- `-t sh` - Shell (.sh, .bash, .zsh, .bashrc)
|
||||
- `-t html` - HTML (.html, .htm, .ejs)
|
||||
- `-t css` - CSS (.css, .scss)
|
||||
- `-t md` - Markdown (.md, .markdown, .mdx)
|
||||
- `-t json` - JSON (.json)
|
||||
- `-t yaml` - YAML (.yaml, .yml)
|
||||
|
||||
**Multiple types:**
|
||||
```bash
|
||||
rg -t js -t ts -e 'pattern'
|
||||
```
|
||||
|
||||
**Glob patterns (more flexible):**
|
||||
```bash
|
||||
rg -g '*.test.js' -e 'pattern' # Test files only
|
||||
rg -g '!*.test.js' -e 'pattern' # Exclude test files
|
||||
rg -g 'src/**/*.js' -e 'pattern' # Specific directory pattern
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# Pattern Syntax Quick Reference
|
||||
|
||||
## Literal Search (Use -F)
|
||||
```bash
|
||||
rg -F -e 'exact.string'
|
||||
```
|
||||
When pattern has special chars, use `-F` instead of escaping.
|
||||
|
||||
## Regex Patterns
|
||||
```bash
|
||||
rg -e 'function\s+\w+' # Function declarations
|
||||
rg -e 'import.*from\s+["\']' # Import statements
|
||||
rg -e 'class\s+\w+.*\{' # Class definitions
|
||||
rg -e '^\s*#' # Lines starting with #
|
||||
rg -e 'TODO:|FIXME:|XXX:' # Multiple comment markers
|
||||
```
|
||||
|
||||
## Common Regex Elements
|
||||
- `\s` - whitespace
|
||||
- `\w` - word character
|
||||
- `\d` - digit
|
||||
- `.` - any character
|
||||
- `.*` - zero or more any character
|
||||
- `\b` - word boundary (or use `-w` flag)
|
||||
- `^` - start of line
|
||||
- `$` - end of line
|
||||
- `[abc]` - character class
|
||||
- `(foo|bar)` - alternation
|
||||
|
||||
---
|
||||
|
||||
# Decision Flow
|
||||
|
||||
```
|
||||
Need to search code?
|
||||
│
|
||||
├─ Simple pattern, no special needs?
|
||||
│ → Use Grep tool (structured output)
|
||||
│
|
||||
├─ Need one-shot with context?
|
||||
│ → rg -n -C 2 -t TYPE -e 'pattern'
|
||||
│
|
||||
├─ Pattern has dots, parens, special chars?
|
||||
│ → rg -F -n -C 2 -t TYPE -e 'exact.string'
|
||||
│
|
||||
├─ Need precise word matching?
|
||||
│ → rg -w -n -C 2 -t TYPE -e 'word'
|
||||
│
|
||||
├─ Need to find files WITHOUT something?
|
||||
│ → rg -L -t TYPE -e 'pattern'
|
||||
│
|
||||
└─ Need to compose with other commands?
|
||||
→ rg -n -t TYPE -e 'pattern' | head/wc/sort/etc
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# Common Workflows
|
||||
|
||||
## "Find all uses of this function"
|
||||
```bash
|
||||
rg -n -C 2 -t js -e 'functionName\('
|
||||
```
|
||||
Use `\(` to find actual calls (not definitions).
|
||||
|
||||
## "Which files import this package?"
|
||||
```bash
|
||||
rg -l -t js -e 'from ["\']package-name["\']'
|
||||
```
|
||||
|
||||
## "How is this class used?"
|
||||
```bash
|
||||
rg -n -C 3 -t py -e 'ClassName'
|
||||
```
|
||||
More context (C 3) to see usage patterns.
|
||||
|
||||
## "Find TODOs in specific directory"
|
||||
```bash
|
||||
rg -n -e 'TODO:' src/
|
||||
```
|
||||
|
||||
## "Find files that import X but not Y"
|
||||
```bash
|
||||
rg -l -t js -e 'import.*from.*package-x' | rg -v -F -e 'package-y'
|
||||
```
|
||||
|
||||
## "Count occurrences across codebase"
|
||||
```bash
|
||||
rg -c -t js -e 'pattern' | rg -e ':' | wc -l
|
||||
```
|
||||
Count files with matches.
|
||||
|
||||
---
|
||||
|
||||
# Best Practices
|
||||
|
||||
## 1. Start with Standard Pattern
|
||||
```bash
|
||||
rg -n -C 2 -t TYPE -e 'pattern'
|
||||
```
|
||||
Adjust only if needed.
|
||||
|
||||
## 2. Use -F for Literal Strings
|
||||
Don't escape regex chars - use `-F`:
|
||||
```bash
|
||||
# BAD: rg -e 'function\(\)'
|
||||
# GOOD: rg -F -e 'function()'
|
||||
```
|
||||
|
||||
## 3. Always Use Single Quotes
|
||||
```bash
|
||||
# GOOD: rg -e 'pattern'
|
||||
# BAD: rg -e "pattern" # Shell may interpret special chars
|
||||
```
|
||||
|
||||
## 4. Use Type Filters
|
||||
```bash
|
||||
# GOOD: rg -t js -e 'pattern'
|
||||
# LESS GOOD: rg -e 'pattern' # Searches everything
|
||||
```
|
||||
|
||||
## 5. Limit Large Results
|
||||
```bash
|
||||
rg -n -t js -e 'common_word' | head -50
|
||||
```
|
||||
|
||||
## 6. Use -w for Precision
|
||||
```bash
|
||||
# Finds "test" in "testing", "latest", etc:
|
||||
rg -e 'test'
|
||||
|
||||
# Finds only "test" as whole word:
|
||||
rg -w -e 'test'
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# When to Use Grep Tool Instead
|
||||
|
||||
Use Grep tool when:
|
||||
- Simple pattern with no special flags needed
|
||||
- Want structured output modes (files/content/count)
|
||||
- Don't need to pipe results
|
||||
- Pattern doesn't need -F, -v, or -w
|
||||
|
||||
Use Bash(rg) when:
|
||||
- Need one-shot results with context
|
||||
- Need -F (literal), -v (invert), -w (word boundary)
|
||||
- Want to pipe/compose with other commands
|
||||
- Need maximum control and efficiency
|
||||
|
||||
**Default to Bash(rg) for most searches** - it's more efficient for one-shot results.
|
||||
|
||||
---
|
||||
|
||||
# Summary
|
||||
|
||||
**Default search command:**
|
||||
```bash
|
||||
rg -n -C 2 -t TYPE -e 'pattern'
|
||||
```
|
||||
|
||||
**Key flags to remember:**
|
||||
- `-F` - Literal search (avoid escaping)
|
||||
- `-w` - Word boundaries (precise)
|
||||
- `-v` - Invert match (find files WITHOUT)
|
||||
- `-l` - List files only
|
||||
- `-L` - List files that DON'T match
|
||||
|
||||
**Compose with pipes:**
|
||||
```bash
|
||||
rg ... | head -N # Limit results
|
||||
rg ... | wc -l # Count
|
||||
rg ... | rg ... # Filter further
|
||||
```
|
||||
|
||||
This reference provides practical patterns for efficient one-shot searches.
|
||||
Reference in New Issue
Block a user