rg Code Search Expert knowledge for using rg (ripgrep) as a blazingly fast code search tool with powerful filtering and pattern matching. Core Expertise ripgrep Advantages Extremely fast (written in Rust) Respects .gitignore automatically Smart case-insensitive search Recursive by default Colorized output Multi-line search support Replace functionality Basic Usage Simple Search
Basic search
rg pattern
Search in current directory
rg "import numpy"
Search for exact phrase
rg function_name
Search for function name
Case-sensitive search
rg -s Pattern
Force case-sensitive
rg -i PATTERN
Force case-insensitive
File Type Filtering
Search specific file types
rg pattern -t py
Python files only
rg pattern -t rs
Rust files only
rg pattern -t js
JavaScript files
rg pattern -t md
Markdown files
Multiple types
rg pattern -t py -t rs
Python and Rust
List available types
rg --type-list
Show all known types
Extension Filtering
Filter by extension
rg pattern -g '*.rs'
Rust files
rg pattern -g '*.{js,ts}'
JavaScript and TypeScript
rg pattern -g '!*.min.js'
Exclude minified files
Advanced Patterns Regular Expressions
Word boundaries
rg '\bfunction\b'
Match whole word "function"
rg '\btest_\w+'
Words starting with test_
Line anchors
rg '^import'
Lines starting with import
rg 'return$'
Lines ending with return
rg '^class \w+:'
Python class definitions
Character classes
rg 'TODO|FIXME|XXX'
Find markers
rg '[Ee]rror'
Error or error
rg '\d{3}-\d{4}'
Phone numbers
Multi-line Search
Multi-line patterns
rg -U 'fn.{.}'
Function definitions (Rust)
rg -U 'struct.{[^}]}'
Struct definitions
Context lines
rg -A 5 pattern
Show 5 lines after
rg -B 3 pattern
Show 3 lines before
rg -C 2 pattern
Show 2 lines before and after
Output Formatting
Control output
rg -l pattern
List files with matches only
rg -c pattern
Count matches per file
rg --count-matches pattern
Total match count
Show context
rg -n pattern
Show line numbers (default)
rg -N pattern
Don't show line numbers
rg --heading pattern
Group by file (default)
rg --no-heading pattern
Don't group by file
Customize output
rg --vimgrep pattern
Vim-compatible format
rg --json pattern
JSON output
Advanced Filtering Path Filtering
Search in specific directories
rg pattern src/
Only src/ directory
rg pattern src/ tests/
Multiple directories
Exclude paths
rg pattern -g '!target/'
Exclude target/
rg pattern -g '!{dist,build,node_modules}/'
Exclude multiple
Full path matching
rg pattern -g '/test/'
Only test directories
Content Filtering
Search only in files containing pattern
rg --files-with-matches "import.*React" | xargs rg "useState"
Exclude files by content
rg pattern --type-not markdown
Search only uncommitted files
rg pattern $( git diff --name-only ) Size and Hidden Files
Include hidden files
rg pattern -u
Include hidden
rg pattern -uu
Include hidden + .gitignore'd
rg pattern -uuu
Unrestricted: everything
Exclude by size
rg pattern --max-filesize 1M
Skip files over 1MB
Code Search Patterns Finding Definitions
Function definitions
rg '^def \w+('
Python functions
rg 'fn \w+('
Rust functions
rg '^function \w+('
JavaScript functions
rg '^\s*class \w+'
Class definitions
Interface/type definitions
rg '^interface \w+'
TypeScript interfaces
rg '^type \w+ ='
Type aliases
rg '^struct \w+'
Struct definitions (Rust/Go)
Finding Usage
Find function calls
rg 'functionName('
Direct calls
rg '.methodName('
Method calls
Find imports
rg '^import.*module_name'
Python imports
rg '^use.*crate_name'
Rust uses
rg "^import.*'package'"
JavaScript imports
Code Quality Checks
Find TODOs and FIXMEs
rg 'TODO|FIXME|XXX|HACK'
Find all markers
rg -t py '#\s*TODO'
Python TODOs
rg -t rs '//\s*TODO'
Rust TODOs
Find debug statements
rg 'console.log'
JavaScript
rg 'println!'
Rust
rg 'print('
Python
Find security issues
rg 'password.=|api_key.='
Potential secrets
rg 'eval('
Eval usage
rg 'exec('
Exec usage
Testing Patterns
Find tests
rg '^def test_' -t py
Python tests
rg '#[test]' -t rs
Rust tests
rg "describe(|it(" -t js
JavaScript tests
Find skipped tests
rg '@skip|@pytest.mark.skip' -t py rg '#[ignore]' -t rs rg 'test.skip|it.skip' -t js File Operations Search and Replace
Preview replacements
rg pattern --replace replacement
Perform replacement (requires external tool)
rg pattern -l | xargs sed -i 's/pattern/replacement/g'
With confirmation (using fd and interactive)
fd -e rs | xargs rg pattern --files-with-matches | xargs -I { } sh -c 'vim -c "%s/pattern/replacement/gc" -c "wq" {}' Integration with Other Tools
Pipe to other commands
rg -l "TODO" | xargs wc -l
Count lines with TODOs
rg "function" --files-with-matches | xargs nvim
Open files in editor
Combine with fd (prefer fd's native -x execution)
fd -e py -x rg "class.*Test" { }
Find test classes
fd -e rs -x rg "unsafe" { }
Find unsafe blocks
Count occurrences
rg -c pattern | awk -F: '{sum+=$2} END {print sum}' Stats and Analysis
Count total matches
rg pattern --count-matches --no-filename | awk '{sum+=$1} END {print sum}'
Find most common matches
rg pattern -o | sort | uniq -c | sort -rn
Files with most matches
rg pattern -c | sort -t: -k2 -rn | head -10 Performance Optimization Speed Tips
Limit search
rg pattern --max-depth 3
Limit directory depth
rg pattern -g '*.rs' -t rust
Use type filters
Parallel processing (default)
rg pattern -j 4
Use 4 threads
Memory management
rg pattern --mmap
Use memory maps (faster)
rg pattern --no-mmap
Don't use memory maps
Large Codebase Strategies
Narrow scope first
rg pattern src/
Specific directory
rg pattern -t py -g '!test*'
Specific type, exclude tests
Use file list caching
rg --files
/tmp/files.txt rg pattern $( cat /tmp/files.txt )
Exclude large directories
rg pattern -g '!{target,node_modules,dist,build}/' Best Practices When to Use rg Searching code for patterns Finding function/class definitions Code analysis and auditing Refactoring support Security scanning When to Use grep Instead POSIX compatibility required Simple one-off searches Piped input (stdin) System administration tasks Tips for Effective Searches Escape regex special characters in patterns Use -u flags when searching ignored/hidden files Exclude large binary/generated files with --glob '!vendor' Prefer rg over grep for speed and smart defaults Quick Reference Essential Options Option Purpose Example -t TYPE File type filter rg -t py pattern -g GLOB Glob pattern rg -g '.rs' pattern -i Case-insensitive rg -i pattern -s Case-sensitive rg -s Pattern -w Match whole words rg -w word -l Files with matches rg -l pattern -c Count per file rg -c pattern -A N Lines after rg -A 5 pattern -B N Lines before rg -B 3 pattern -C N Context lines rg -C 2 pattern -U Multi-line rg -U 'pattern.' -u Include hidden rg -u pattern --replace Replace text rg pattern --replace new File Types (Common) Type Extensions -t py Python (.py, .pyi) -t rs Rust (.rs) -t js JavaScript (.js, .jsx) -t ts TypeScript (.ts, .tsx) -t go Go (.go) -t md Markdown (.md, .markdown) -t yaml YAML (.yaml, .yml) -t json JSON (.json) Common Command Patterns
Find function definitions across codebase
rg '^\s*(def|fn|function)\s+\w+' -t py -t rs -t js
Find all imports
rg '^(import|use|require)' -t py -t rs -t js
Find potential bugs
rg 'TODO|FIXME|XXX|HACK|BUG'
Find test files and count tests
rg -t py '^def test_' -c
Find large functions (50+ lines)
rg -U 'def \w+.\n(.\n){50,}' -t py
Security audit
rg 'password|api_key|secret|token' -i -g '!*.{lock,log}' This makes rg the preferred tool for fast, powerful code search in development workflows.