aia 0.0.5 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +24 -2
- data/lib/aia/aia_completion.bash +39 -0
- data/lib/aia/aia_completion.fish +34 -0
- data/lib/aia/aia_completion.zsh +39 -0
- data/lib/aia/cli.rb +45 -31
- data/lib/aia/configuration.rb +0 -5
- data/lib/aia/external/,keep +0 -0
- data/lib/aia/external/.irbrc +11 -0
- data/lib/aia/external/ag.rb +103 -0
- data/lib/aia/external/bat.rb +189 -0
- data/lib/aia/external/fzf.rb +147 -0
- data/lib/aia/external/glow.rb +37 -0
- data/lib/aia/external/mods.rb +57 -0
- data/lib/aia/external/rg.rb +1163 -0
- data/lib/aia/external/sgpt.rb +58 -0
- data/lib/aia/external/subl.rb +47 -0
- data/lib/aia/external/tool.rb +73 -0
- data/lib/aia/external.rb +259 -0
- data/lib/aia/external_two.rb +43 -0
- data/lib/aia/main.rb +2 -2
- data/lib/aia/prompt_processing.rb +67 -13
- data/lib/aia/version.rb +1 -1
- metadata +18 -5
- data/bin/aia_completion.sh +0 -37
- data/lib/aia/external_commands.rb +0 -116
@@ -0,0 +1,1163 @@
|
|
1
|
+
# lib/aia/external/rg.rb
|
2
|
+
|
3
|
+
class AIA::External::Rg < AIA::External::Tool
|
4
|
+
def initialize
|
5
|
+
super
|
6
|
+
@role = :search
|
7
|
+
@desc = "Search tool like grep and The Silver Searcher"
|
8
|
+
@url = "https://github.com/BurntSushi/ripgrep"
|
9
|
+
end
|
10
|
+
|
11
|
+
def command(search_term, options = {})
|
12
|
+
rg_command = "rg --color=always --line-number --no-heading --smart-case #{search_term}"
|
13
|
+
"#{rg_command} | fzf #{options[:fzf_options]}"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
__END__
|
18
|
+
|
19
|
+
ripgrep 13.0.0
|
20
|
+
Andrew Gallant <jamslam@gmail.com>
|
21
|
+
|
22
|
+
ripgrep (rg) recursively searches the current directory for a regex pattern.
|
23
|
+
By default, ripgrep will respect gitignore rules and automatically skip hidden
|
24
|
+
files/directories and binary files.
|
25
|
+
|
26
|
+
Use -h for short descriptions and --help for more details.
|
27
|
+
|
28
|
+
Project home page: https://github.com/BurntSushi/ripgrep
|
29
|
+
|
30
|
+
|
31
|
+
USAGE:
|
32
|
+
rg [OPTIONS] PATTERN [PATH ...]
|
33
|
+
rg [OPTIONS] -e PATTERN ... [PATH ...]
|
34
|
+
rg [OPTIONS] -f PATTERNFILE ... [PATH ...]
|
35
|
+
rg [OPTIONS] --files [PATH ...]
|
36
|
+
rg [OPTIONS] --type-list
|
37
|
+
command | rg [OPTIONS] PATTERN
|
38
|
+
rg [OPTIONS] --help
|
39
|
+
rg [OPTIONS] --version
|
40
|
+
|
41
|
+
ARGS:
|
42
|
+
<PATTERN>
|
43
|
+
A regular expression used for searching. To match a pattern beginning with a
|
44
|
+
dash, use the -e/--regexp flag.
|
45
|
+
|
46
|
+
For example, to search for the literal '-foo', you can use this flag:
|
47
|
+
|
48
|
+
rg -e -foo
|
49
|
+
|
50
|
+
You can also use the special '--' delimiter to indicate that no more flags
|
51
|
+
will be provided. Namely, the following is equivalent to the above:
|
52
|
+
|
53
|
+
rg -- -foo
|
54
|
+
|
55
|
+
<PATH>...
|
56
|
+
A file or directory to search. Directories are searched recursively. File paths
|
57
|
+
specified on the command line override glob and ignore rules.
|
58
|
+
|
59
|
+
OPTIONS:
|
60
|
+
-A, --after-context <NUM>
|
61
|
+
Show NUM lines after each match.
|
62
|
+
|
63
|
+
This overrides the --context and --passthru flags.
|
64
|
+
|
65
|
+
--auto-hybrid-regex
|
66
|
+
DEPRECATED. Use --engine instead.
|
67
|
+
|
68
|
+
When this flag is used, ripgrep will dynamically choose between supported regex
|
69
|
+
engines depending on the features used in a pattern. When ripgrep chooses a
|
70
|
+
regex engine, it applies that choice for every regex provided to ripgrep (e.g.,
|
71
|
+
via multiple -e/--regexp or -f/--file flags).
|
72
|
+
|
73
|
+
As an example of how this flag might behave, ripgrep will attempt to use
|
74
|
+
its default finite automata based regex engine whenever the pattern can be
|
75
|
+
successfully compiled with that regex engine. If PCRE2 is enabled and if the
|
76
|
+
pattern given could not be compiled with the default regex engine, then PCRE2
|
77
|
+
will be automatically used for searching. If PCRE2 isn't available, then this
|
78
|
+
flag has no effect because there is only one regex engine to choose from.
|
79
|
+
|
80
|
+
In the future, ripgrep may adjust its heuristics for how it decides which
|
81
|
+
regex engine to use. In general, the heuristics will be limited to a static
|
82
|
+
analysis of the patterns, and not to any specific runtime behavior observed
|
83
|
+
while searching files.
|
84
|
+
|
85
|
+
The primary downside of using this flag is that it may not always be obvious
|
86
|
+
which regex engine ripgrep uses, and thus, the match semantics or performance
|
87
|
+
profile of ripgrep may subtly and unexpectedly change. However, in many cases,
|
88
|
+
all regex engines will agree on what constitutes a match and it can be nice
|
89
|
+
to transparently support more advanced regex features like look-around and
|
90
|
+
backreferences without explicitly needing to enable them.
|
91
|
+
|
92
|
+
This flag can be disabled with --no-auto-hybrid-regex.
|
93
|
+
|
94
|
+
-B, --before-context <NUM>
|
95
|
+
Show NUM lines before each match.
|
96
|
+
|
97
|
+
This overrides the --context and --passthru flags.
|
98
|
+
|
99
|
+
--binary
|
100
|
+
Enabling this flag will cause ripgrep to search binary files. By default,
|
101
|
+
ripgrep attempts to automatically skip binary files in order to improve the
|
102
|
+
relevance of results and make the search faster.
|
103
|
+
|
104
|
+
Binary files are heuristically detected based on whether they contain a NUL
|
105
|
+
byte or not. By default (without this flag set), once a NUL byte is seen,
|
106
|
+
ripgrep will stop searching the file. Usually, NUL bytes occur in the beginning
|
107
|
+
of most binary files. If a NUL byte occurs after a match, then ripgrep will
|
108
|
+
still stop searching the rest of the file, but a warning will be printed.
|
109
|
+
|
110
|
+
In contrast, when this flag is provided, ripgrep will continue searching a file
|
111
|
+
even if a NUL byte is found. In particular, if a NUL byte is found then ripgrep
|
112
|
+
will continue searching until either a match is found or the end of the file is
|
113
|
+
reached, whichever comes sooner. If a match is found, then ripgrep will stop
|
114
|
+
and print a warning saying that the search stopped prematurely.
|
115
|
+
|
116
|
+
If you want ripgrep to search a file without any special NUL byte handling at
|
117
|
+
all (and potentially print binary data to stdout), then you should use the
|
118
|
+
'-a/--text' flag.
|
119
|
+
|
120
|
+
The '--binary' flag is a flag for controlling ripgrep's automatic filtering
|
121
|
+
mechanism. As such, it does not need to be used when searching a file
|
122
|
+
explicitly or when searching stdin. That is, it is only applicable when
|
123
|
+
recursively searching a directory.
|
124
|
+
|
125
|
+
Note that when the '-u/--unrestricted' flag is provided for a third time, then
|
126
|
+
this flag is automatically enabled.
|
127
|
+
|
128
|
+
This flag can be disabled with '--no-binary'. It overrides the '-a/--text'
|
129
|
+
flag.
|
130
|
+
|
131
|
+
--block-buffered
|
132
|
+
When enabled, ripgrep will use block buffering. That is, whenever a matching
|
133
|
+
line is found, it will be written to an in-memory buffer and will not be
|
134
|
+
written to stdout until the buffer reaches a certain size. This is the default
|
135
|
+
when ripgrep's stdout is redirected to a pipeline or a file. When ripgrep's
|
136
|
+
stdout is connected to a terminal, line buffering will be used. Forcing block
|
137
|
+
buffering can be useful when dumping a large amount of contents to a terminal.
|
138
|
+
|
139
|
+
Forceful block buffering can be disabled with --no-block-buffered. Note that
|
140
|
+
using --no-block-buffered causes ripgrep to revert to its default behavior of
|
141
|
+
automatically detecting the buffering strategy. To force line buffering, use
|
142
|
+
the --line-buffered flag.
|
143
|
+
|
144
|
+
-b, --byte-offset
|
145
|
+
Print the 0-based byte offset within the input file before each line of output.
|
146
|
+
If -o (--only-matching) is specified, print the offset of the matching part
|
147
|
+
itself.
|
148
|
+
|
149
|
+
If ripgrep does transcoding, then the byte offset is in terms of the the result
|
150
|
+
of transcoding and not the original data. This applies similarly to another
|
151
|
+
transformation on the source, such as decompression or a --pre filter. Note
|
152
|
+
that when the PCRE2 regex engine is used, then UTF-8 transcoding is done by
|
153
|
+
default.
|
154
|
+
|
155
|
+
-s, --case-sensitive
|
156
|
+
Search case sensitively.
|
157
|
+
|
158
|
+
This overrides the -i/--ignore-case and -S/--smart-case flags.
|
159
|
+
|
160
|
+
--color <WHEN>
|
161
|
+
This flag controls when to use colors. The default setting is 'auto', which
|
162
|
+
means ripgrep will try to guess when to use colors. For example, if ripgrep is
|
163
|
+
printing to a terminal, then it will use colors, but if it is redirected to a
|
164
|
+
file or a pipe, then it will suppress color output. ripgrep will suppress color
|
165
|
+
output in some other circumstances as well. For example, if the TERM
|
166
|
+
environment variable is not set or set to 'dumb', then ripgrep will not use
|
167
|
+
colors.
|
168
|
+
|
169
|
+
The possible values for this flag are:
|
170
|
+
|
171
|
+
never Colors will never be used.
|
172
|
+
auto The default. ripgrep tries to be smart.
|
173
|
+
always Colors will always be used regardless of where output is sent.
|
174
|
+
ansi Like 'always', but emits ANSI escapes (even in a Windows console).
|
175
|
+
|
176
|
+
When the --vimgrep flag is given to ripgrep, then the default value for the
|
177
|
+
--color flag changes to 'never'.
|
178
|
+
|
179
|
+
--colors <COLOR_SPEC>...
|
180
|
+
This flag specifies color settings for use in the output. This flag may be
|
181
|
+
provided multiple times. Settings are applied iteratively. Colors are limited
|
182
|
+
to one of eight choices: red, blue, green, cyan, magenta, yellow, white and
|
183
|
+
black. Styles are limited to nobold, bold, nointense, intense, nounderline
|
184
|
+
or underline.
|
185
|
+
|
186
|
+
The format of the flag is '{type}:{attribute}:{value}'. '{type}' should be
|
187
|
+
one of path, line, column or match. '{attribute}' can be fg, bg or style.
|
188
|
+
'{value}' is either a color (for fg and bg) or a text style. A special format,
|
189
|
+
'{type}:none', will clear all color settings for '{type}'.
|
190
|
+
|
191
|
+
For example, the following command will change the match color to magenta and
|
192
|
+
the background color for line numbers to yellow:
|
193
|
+
|
194
|
+
rg --colors 'match:fg:magenta' --colors 'line:bg:yellow' foo.
|
195
|
+
|
196
|
+
Extended colors can be used for '{value}' when the terminal supports ANSI color
|
197
|
+
sequences. These are specified as either 'x' (256-color) or 'x,x,x' (24-bit
|
198
|
+
truecolor) where x is a number between 0 and 255 inclusive. x may be given as
|
199
|
+
a normal decimal number or a hexadecimal number, which is prefixed by `0x`.
|
200
|
+
|
201
|
+
For example, the following command will change the match background color to
|
202
|
+
that represented by the rgb value (0,128,255):
|
203
|
+
|
204
|
+
rg --colors 'match:bg:0,128,255'
|
205
|
+
|
206
|
+
or, equivalently,
|
207
|
+
|
208
|
+
rg --colors 'match:bg:0x0,0x80,0xFF'
|
209
|
+
|
210
|
+
Note that the the intense and nointense style flags will have no effect when
|
211
|
+
used alongside these extended color codes.
|
212
|
+
|
213
|
+
--column
|
214
|
+
Show column numbers (1-based). This only shows the column numbers for the first
|
215
|
+
match on each line. This does not try to account for Unicode. One byte is equal
|
216
|
+
to one column. This implies --line-number.
|
217
|
+
|
218
|
+
This flag can be disabled with --no-column.
|
219
|
+
|
220
|
+
-C, --context <NUM>
|
221
|
+
Show NUM lines before and after each match. This is equivalent to providing
|
222
|
+
both the -B/--before-context and -A/--after-context flags with the same value.
|
223
|
+
|
224
|
+
This overrides both the -B/--before-context and -A/--after-context flags,
|
225
|
+
in addition to the --passthru flag.
|
226
|
+
|
227
|
+
--context-separator <SEPARATOR>
|
228
|
+
The string used to separate non-contiguous context lines in the output. This
|
229
|
+
is only used when one of the context flags is used (-A, -B or -C). Escape
|
230
|
+
sequences like \x7F or \t may be used. The default value is --.
|
231
|
+
|
232
|
+
When the context separator is set to an empty string, then a line break
|
233
|
+
is still inserted. To completely disable context separators, use the
|
234
|
+
--no-context-separator flag.
|
235
|
+
|
236
|
+
-c, --count
|
237
|
+
This flag suppresses normal output and shows the number of lines that match
|
238
|
+
the given patterns for each file searched. Each file containing a match has its
|
239
|
+
path and count printed on each line. Note that this reports the number of lines
|
240
|
+
that match and not the total number of matches, unless -U/--multiline is
|
241
|
+
enabled. In multiline mode, --count is equivalent to --count-matches.
|
242
|
+
|
243
|
+
If only one file is given to ripgrep, then only the count is printed if there
|
244
|
+
is a match. The --with-filename flag can be used to force printing the file
|
245
|
+
path in this case. If you need a count to be printed regardless of whether
|
246
|
+
there is a match, then use --include-zero.
|
247
|
+
|
248
|
+
This overrides the --count-matches flag. Note that when --count is combined
|
249
|
+
with --only-matching, then ripgrep behaves as if --count-matches was given.
|
250
|
+
|
251
|
+
--count-matches
|
252
|
+
This flag suppresses normal output and shows the number of individual
|
253
|
+
matches of the given patterns for each file searched. Each file
|
254
|
+
containing matches has its path and match count printed on each line.
|
255
|
+
Note that this reports the total number of individual matches and not
|
256
|
+
the number of lines that match.
|
257
|
+
|
258
|
+
If only one file is given to ripgrep, then only the count is printed if there
|
259
|
+
is a match. The --with-filename flag can be used to force printing the file
|
260
|
+
path in this case.
|
261
|
+
|
262
|
+
This overrides the --count flag. Note that when --count is combined with
|
263
|
+
--only-matching, then ripgrep behaves as if --count-matches was given.
|
264
|
+
|
265
|
+
--crlf
|
266
|
+
When enabled, ripgrep will treat CRLF ('\r\n') as a line terminator instead
|
267
|
+
of just '\n'.
|
268
|
+
|
269
|
+
Principally, this permits '$' in regex patterns to match just before CRLF
|
270
|
+
instead of just before LF. The underlying regex engine may not support this
|
271
|
+
natively, so ripgrep will translate all instances of '$' to '(?:\r??$)'. This
|
272
|
+
may produce slightly different than desired match offsets. It is intended as a
|
273
|
+
work-around until the regex engine supports this natively.
|
274
|
+
|
275
|
+
CRLF support can be disabled with --no-crlf.
|
276
|
+
|
277
|
+
--debug
|
278
|
+
Show debug messages. Please use this when filing a bug report.
|
279
|
+
|
280
|
+
The --debug flag is generally useful for figuring out why ripgrep skipped
|
281
|
+
searching a particular file. The debug messages should mention all files
|
282
|
+
skipped and why they were skipped.
|
283
|
+
|
284
|
+
To get even more debug output, use the --trace flag, which implies --debug
|
285
|
+
along with additional trace data. With --trace, the output could be quite
|
286
|
+
large and is generally more useful for development.
|
287
|
+
|
288
|
+
--dfa-size-limit <NUM+SUFFIX?>
|
289
|
+
The upper size limit of the regex DFA. The default limit is 10M. This should
|
290
|
+
only be changed on very large regex inputs where the (slower) fallback regex
|
291
|
+
engine may otherwise be used if the limit is reached.
|
292
|
+
|
293
|
+
The argument accepts the same size suffixes as allowed in with the
|
294
|
+
--max-filesize flag.
|
295
|
+
|
296
|
+
-E, --encoding <ENCODING>
|
297
|
+
Specify the text encoding that ripgrep will use on all files searched. The
|
298
|
+
default value is 'auto', which will cause ripgrep to do a best effort automatic
|
299
|
+
detection of encoding on a per-file basis. Automatic detection in this case
|
300
|
+
only applies to files that begin with a UTF-8 or UTF-16 byte-order mark (BOM).
|
301
|
+
No other automatic detection is performed. One can also specify 'none' which
|
302
|
+
will then completely disable BOM sniffing and always result in searching the
|
303
|
+
raw bytes, including a BOM if it's present, regardless of its encoding.
|
304
|
+
|
305
|
+
Other supported values can be found in the list of labels here:
|
306
|
+
https://encoding.spec.whatwg.org/#concept-encoding-get
|
307
|
+
|
308
|
+
For more details on encoding and how ripgrep deals with it, see GUIDE.md.
|
309
|
+
|
310
|
+
This flag can be disabled with --no-encoding.
|
311
|
+
|
312
|
+
--engine <ENGINE>
|
313
|
+
Specify which regular expression engine to use. When you choose a regex engine,
|
314
|
+
it applies that choice for every regex provided to ripgrep (e.g., via multiple
|
315
|
+
-e/--regexp or -f/--file flags).
|
316
|
+
|
317
|
+
Accepted values are 'default', 'pcre2', or 'auto'.
|
318
|
+
|
319
|
+
The default value is 'default', which is the fastest and should be good for
|
320
|
+
most use cases. The 'pcre2' engine is generally useful when you want to use
|
321
|
+
features such as look-around or backreferences. 'auto' will dynamically choose
|
322
|
+
between supported regex engines depending on the features used in a pattern on
|
323
|
+
a best effort basis.
|
324
|
+
|
325
|
+
Note that the 'pcre2' engine is an optional ripgrep feature. If PCRE2 wasn't
|
326
|
+
included in your build of ripgrep, then using this flag will result in ripgrep
|
327
|
+
printing an error message and exiting.
|
328
|
+
|
329
|
+
This overrides previous uses of --pcre2 and --auto-hybrid-regex flags.
|
330
|
+
[default: default]
|
331
|
+
--field-context-separator <SEPARATOR>
|
332
|
+
Set the field context separator, which is used to delimit file paths, line
|
333
|
+
numbers, columns and the context itself, when printing contextual lines. The
|
334
|
+
separator may be any number of bytes, including zero. Escape sequences like
|
335
|
+
\x7F or \t may be used. The default value is -.
|
336
|
+
|
337
|
+
--field-match-separator <SEPARATOR>
|
338
|
+
Set the field match separator, which is used to delimit file paths, line
|
339
|
+
numbers, columns and the match itself. The separator may be any number of
|
340
|
+
bytes, including zero. Escape sequences like \x7F or \t may be used. The
|
341
|
+
default value is -.
|
342
|
+
|
343
|
+
-f, --file <PATTERNFILE>...
|
344
|
+
Search for patterns from the given file, with one pattern per line. When this
|
345
|
+
flag is used multiple times or in combination with the -e/--regexp flag,
|
346
|
+
then all patterns provided are searched. Empty pattern lines will match all
|
347
|
+
input lines, and the newline is not counted as part of the pattern.
|
348
|
+
|
349
|
+
A line is printed if and only if it matches at least one of the patterns.
|
350
|
+
|
351
|
+
--files
|
352
|
+
Print each file that would be searched without actually performing the search.
|
353
|
+
This is useful to determine whether a particular file is being searched or not.
|
354
|
+
|
355
|
+
-l, --files-with-matches
|
356
|
+
Print the paths with at least one match and suppress match contents.
|
357
|
+
|
358
|
+
This overrides --files-without-match.
|
359
|
+
|
360
|
+
--files-without-match
|
361
|
+
Print the paths that contain zero matches and suppress match contents. This
|
362
|
+
inverts/negates the --files-with-matches flag.
|
363
|
+
|
364
|
+
This overrides --files-with-matches.
|
365
|
+
|
366
|
+
-F, --fixed-strings
|
367
|
+
Treat the pattern as a literal string instead of a regular expression. When
|
368
|
+
this flag is used, special regular expression meta characters such as .(){}*+
|
369
|
+
do not need to be escaped.
|
370
|
+
|
371
|
+
This flag can be disabled with --no-fixed-strings.
|
372
|
+
|
373
|
+
-L, --follow
|
374
|
+
When this flag is enabled, ripgrep will follow symbolic links while traversing
|
375
|
+
directories. This is disabled by default. Note that ripgrep will check for
|
376
|
+
symbolic link loops and report errors if it finds one.
|
377
|
+
|
378
|
+
This flag can be disabled with --no-follow.
|
379
|
+
|
380
|
+
-g, --glob <GLOB>...
|
381
|
+
Include or exclude files and directories for searching that match the given
|
382
|
+
glob. This always overrides any other ignore logic. Multiple glob flags may be
|
383
|
+
used. Globbing rules match .gitignore globs. Precede a glob with a ! to exclude
|
384
|
+
it. If multiple globs match a file or directory, the glob given later in the
|
385
|
+
command line takes precedence.
|
386
|
+
|
387
|
+
As an extension, globs support specifying alternatives: *-g ab{c,d}* is
|
388
|
+
equivalet to *-g abc -g abd*. Empty alternatives like *-g ab{,c}* are not
|
389
|
+
currently supported. Note that this syntax extension is also currently enabled
|
390
|
+
in gitignore files, even though this syntax isn't supported by git itself.
|
391
|
+
ripgrep may disable this syntax extension in gitignore files, but it will
|
392
|
+
always remain available via the -g/--glob flag.
|
393
|
+
|
394
|
+
When this flag is set, every file and directory is applied to it to test for
|
395
|
+
a match. So for example, if you only want to search in a particular directory
|
396
|
+
'foo', then *-g foo* is incorrect because 'foo/bar' does not match the glob
|
397
|
+
'foo'. Instead, you should use *-g 'foo/**'*.
|
398
|
+
|
399
|
+
--glob-case-insensitive
|
400
|
+
Process glob patterns given with the -g/--glob flag case insensitively. This
|
401
|
+
effectively treats --glob as --iglob.
|
402
|
+
|
403
|
+
This flag can be disabled with the --no-glob-case-insensitive flag.
|
404
|
+
|
405
|
+
-h, --help
|
406
|
+
Prints help information. Use --help for more details.
|
407
|
+
|
408
|
+
--heading
|
409
|
+
This flag prints the file path above clusters of matches from each file instead
|
410
|
+
of printing the file path as a prefix for each matched line. This is the
|
411
|
+
default mode when printing to a terminal.
|
412
|
+
|
413
|
+
This overrides the --no-heading flag.
|
414
|
+
|
415
|
+
-., --hidden
|
416
|
+
Search hidden files and directories. By default, hidden files and directories
|
417
|
+
are skipped. Note that if a hidden file or a directory is whitelisted in an
|
418
|
+
ignore file, then it will be searched even if this flag isn't provided.
|
419
|
+
|
420
|
+
A file or directory is considered hidden if its base name starts with a dot
|
421
|
+
character ('.'). On operating systems which support a `hidden` file attribute,
|
422
|
+
like Windows, files with this attribute are also considered hidden.
|
423
|
+
|
424
|
+
This flag can be disabled with --no-hidden.
|
425
|
+
|
426
|
+
--iglob <GLOB>...
|
427
|
+
Include or exclude files and directories for searching that match the given
|
428
|
+
glob. This always overrides any other ignore logic. Multiple glob flags may be
|
429
|
+
used. Globbing rules match .gitignore globs. Precede a glob with a ! to exclude
|
430
|
+
it. Globs are matched case insensitively.
|
431
|
+
|
432
|
+
-i, --ignore-case
|
433
|
+
When this flag is provided, the given patterns will be searched case
|
434
|
+
insensitively. The case insensitivity rules used by ripgrep conform to
|
435
|
+
Unicode's "simple" case folding rules.
|
436
|
+
|
437
|
+
This flag overrides -s/--case-sensitive and -S/--smart-case.
|
438
|
+
|
439
|
+
--ignore-file <PATH>...
|
440
|
+
Specifies a path to one or more .gitignore format rules files. These patterns
|
441
|
+
are applied after the patterns found in .gitignore and .ignore are applied
|
442
|
+
and are matched relative to the current working directory. Multiple additional
|
443
|
+
ignore files can be specified by using the --ignore-file flag several times.
|
444
|
+
When specifying multiple ignore files, earlier files have lower precedence
|
445
|
+
than later files.
|
446
|
+
|
447
|
+
If you are looking for a way to include or exclude files and directories
|
448
|
+
directly on the command line, then used -g instead.
|
449
|
+
|
450
|
+
--ignore-file-case-insensitive
|
451
|
+
Process ignore files (.gitignore, .ignore, etc.) case insensitively. Note that
|
452
|
+
this comes with a performance penalty and is most useful on case insensitive
|
453
|
+
file systems (such as Windows).
|
454
|
+
|
455
|
+
This flag can be disabled with the --no-ignore-file-case-insensitive flag.
|
456
|
+
|
457
|
+
--include-zero
|
458
|
+
When used with --count or --count-matches, print the number of matches for
|
459
|
+
each file even if there were zero matches. This is disabled by default but can
|
460
|
+
be enabled to make ripgrep behave more like grep.
|
461
|
+
|
462
|
+
-v, --invert-match
|
463
|
+
Invert matching. Show lines that do not match the given patterns.
|
464
|
+
|
465
|
+
--json
|
466
|
+
Enable printing results in a JSON Lines format.
|
467
|
+
|
468
|
+
When this flag is provided, ripgrep will emit a sequence of messages, each
|
469
|
+
encoded as a JSON object, where there are five different message types:
|
470
|
+
|
471
|
+
**begin** - A message that indicates a file is being searched and contains at
|
472
|
+
least one match.
|
473
|
+
|
474
|
+
**end** - A message the indicates a file is done being searched. This message
|
475
|
+
also include summary statistics about the search for a particular file.
|
476
|
+
|
477
|
+
**match** - A message that indicates a match was found. This includes the text
|
478
|
+
and offsets of the match.
|
479
|
+
|
480
|
+
**context** - A message that indicates a contextual line was found. This
|
481
|
+
includes the text of the line, along with any match information if the search
|
482
|
+
was inverted.
|
483
|
+
|
484
|
+
**summary** - The final message emitted by ripgrep that contains summary
|
485
|
+
statistics about the search across all files.
|
486
|
+
|
487
|
+
Since file paths or the contents of files are not guaranteed to be valid UTF-8
|
488
|
+
and JSON itself must be representable by a Unicode encoding, ripgrep will emit
|
489
|
+
all data elements as objects with one of two keys: 'text' or 'bytes'. 'text' is
|
490
|
+
a normal JSON string when the data is valid UTF-8 while 'bytes' is the base64
|
491
|
+
encoded contents of the data.
|
492
|
+
|
493
|
+
The JSON Lines format is only supported for showing search results. It cannot
|
494
|
+
be used with other flags that emit other types of output, such as --files,
|
495
|
+
--files-with-matches, --files-without-match, --count or --count-matches.
|
496
|
+
ripgrep will report an error if any of the aforementioned flags are used in
|
497
|
+
concert with --json.
|
498
|
+
|
499
|
+
Other flags that control aspects of the standard output such as
|
500
|
+
--only-matching, --heading, --replace, --max-columns, etc., have no effect
|
501
|
+
when --json is set.
|
502
|
+
|
503
|
+
A more complete description of the JSON format used can be found here:
|
504
|
+
https://docs.rs/grep-printer/*/grep_printer/struct.JSON.html
|
505
|
+
|
506
|
+
The JSON Lines format can be disabled with --no-json.
|
507
|
+
|
508
|
+
--line-buffered
|
509
|
+
When enabled, ripgrep will use line buffering. That is, whenever a matching
|
510
|
+
line is found, it will be flushed to stdout immediately. This is the default
|
511
|
+
when ripgrep's stdout is connected to a terminal, but otherwise, ripgrep will
|
512
|
+
use block buffering, which is typically faster. This flag forces ripgrep to
|
513
|
+
use line buffering even if it would otherwise use block buffering. This is
|
514
|
+
typically useful in shell pipelines, e.g.,
|
515
|
+
'tail -f something.log | rg foo --line-buffered | rg bar'.
|
516
|
+
|
517
|
+
Forceful line buffering can be disabled with --no-line-buffered. Note that
|
518
|
+
using --no-line-buffered causes ripgrep to revert to its default behavior of
|
519
|
+
automatically detecting the buffering strategy. To force block buffering, use
|
520
|
+
the --block-buffered flag.
|
521
|
+
|
522
|
+
-n, --line-number
|
523
|
+
Show line numbers (1-based). This is enabled by default when searching in a
|
524
|
+
terminal.
|
525
|
+
|
526
|
+
-x, --line-regexp
|
527
|
+
Only show matches surrounded by line boundaries. This is equivalent to putting
|
528
|
+
^...$ around all of the search patterns. In other words, this only prints lines
|
529
|
+
where the entire line participates in a match.
|
530
|
+
|
531
|
+
This overrides the --word-regexp flag.
|
532
|
+
|
533
|
+
-M, --max-columns <NUM>
|
534
|
+
Don't print lines longer than this limit in bytes. Longer lines are omitted,
|
535
|
+
and only the number of matches in that line is printed.
|
536
|
+
|
537
|
+
When this flag is omitted or is set to 0, then it has no effect.
|
538
|
+
|
539
|
+
--max-columns-preview
|
540
|
+
When the '--max-columns' flag is used, ripgrep will by default completely
|
541
|
+
replace any line that is too long with a message indicating that a matching
|
542
|
+
line was removed. When this flag is combined with '--max-columns', a preview
|
543
|
+
of the line (corresponding to the limit size) is shown instead, where the part
|
544
|
+
of the line exceeding the limit is not shown.
|
545
|
+
|
546
|
+
If the '--max-columns' flag is not set, then this has no effect.
|
547
|
+
|
548
|
+
This flag can be disabled with '--no-max-columns-preview'.
|
549
|
+
|
550
|
+
-m, --max-count <NUM>
|
551
|
+
Limit the number of matching lines per file searched to NUM.
|
552
|
+
|
553
|
+
--max-depth <NUM>
|
554
|
+
Limit the depth of directory traversal to NUM levels beyond the paths given. A
|
555
|
+
value of zero only searches the explicitly given paths themselves.
|
556
|
+
|
557
|
+
For example, 'rg --max-depth 0 dir/' is a no-op because dir/ will not be
|
558
|
+
descended into. 'rg --max-depth 1 dir/' will search only the direct children of
|
559
|
+
'dir'.
|
560
|
+
|
561
|
+
--max-filesize <NUM+SUFFIX?>
|
562
|
+
Ignore files larger than NUM in size. This does not apply to directories.
|
563
|
+
|
564
|
+
The input format accepts suffixes of K, M or G which correspond to kilobytes,
|
565
|
+
megabytes and gigabytes, respectively. If no suffix is provided the input is
|
566
|
+
treated as bytes.
|
567
|
+
|
568
|
+
Examples: --max-filesize 50K or --max-filesize 80M
|
569
|
+
|
570
|
+
--mmap
|
571
|
+
Search using memory maps when possible. This is enabled by default when ripgrep
|
572
|
+
thinks it will be faster.
|
573
|
+
|
574
|
+
Memory map searching doesn't currently support all options, so if an
|
575
|
+
incompatible option (e.g., --context) is given with --mmap, then memory maps
|
576
|
+
will not be used.
|
577
|
+
|
578
|
+
Note that ripgrep may abort unexpectedly when --mmap if it searches a file that
|
579
|
+
is simultaneously truncated.
|
580
|
+
|
581
|
+
This flag overrides --no-mmap.
|
582
|
+
|
583
|
+
-U, --multiline
|
584
|
+
Enable matching across multiple lines.
|
585
|
+
|
586
|
+
When multiline mode is enabled, ripgrep will lift the restriction that a match
|
587
|
+
cannot include a line terminator. For example, when multiline mode is not
|
588
|
+
enabled (the default), then the regex '\p{any}' will match any Unicode
|
589
|
+
codepoint other than '\n'. Similarly, the regex '\n' is explicitly forbidden,
|
590
|
+
and if you try to use it, ripgrep will return an error. However, when multiline
|
591
|
+
mode is enabled, '\p{any}' will match any Unicode codepoint, including '\n',
|
592
|
+
and regexes like '\n' are permitted.
|
593
|
+
|
594
|
+
An important caveat is that multiline mode does not change the match semantics
|
595
|
+
of '.'. Namely, in most regex matchers, a '.' will by default match any
|
596
|
+
character other than '\n', and this is true in ripgrep as well. In order to
|
597
|
+
make '.' match '\n', you must enable the "dot all" flag inside the regex.
|
598
|
+
For example, both '(?s).' and '(?s:.)' have the same semantics, where '.' will
|
599
|
+
match any character, including '\n'. Alternatively, the '--multiline-dotall'
|
600
|
+
flag may be passed to make the "dot all" behavior the default. This flag only
|
601
|
+
applies when multiline search is enabled.
|
602
|
+
|
603
|
+
There is no limit on the number of the lines that a single match can span.
|
604
|
+
|
605
|
+
**WARNING**: Because of how the underlying regex engine works, multiline
|
606
|
+
searches may be slower than normal line-oriented searches, and they may also
|
607
|
+
use more memory. In particular, when multiline mode is enabled, ripgrep
|
608
|
+
requires that each file it searches is laid out contiguously in memory
|
609
|
+
(either by reading it onto the heap or by memory-mapping it). Things that
|
610
|
+
cannot be memory-mapped (such as stdin) will be consumed until EOF before
|
611
|
+
searching can begin. In general, ripgrep will only do these things when
|
612
|
+
necessary. Specifically, if the --multiline flag is provided but the regex
|
613
|
+
does not contain patterns that would match '\n' characters, then ripgrep
|
614
|
+
will automatically avoid reading each file into memory before searching it.
|
615
|
+
Nevertheless, if you only care about matches spanning at most one line, then it
|
616
|
+
is always better to disable multiline mode.
|
617
|
+
|
618
|
+
This flag can be disabled with --no-multiline.
|
619
|
+
|
620
|
+
--multiline-dotall
|
621
|
+
This flag enables "dot all" in your regex pattern, which causes '.' to match
|
622
|
+
newlines when multiline searching is enabled. This flag has no effect if
|
623
|
+
multiline searching isn't enabled with the --multiline flag.
|
624
|
+
|
625
|
+
Normally, a '.' will match any character except newlines. While this behavior
|
626
|
+
typically isn't relevant for line-oriented matching (since matches can span at
|
627
|
+
most one line), this can be useful when searching with the -U/--multiline flag.
|
628
|
+
By default, the multiline mode runs without this flag.
|
629
|
+
|
630
|
+
This flag is generally intended to be used in an alias or your ripgrep config
|
631
|
+
file if you prefer "dot all" semantics by default. Note that regardless of
|
632
|
+
whether this flag is used, "dot all" semantics can still be controlled via
|
633
|
+
inline flags in the regex pattern itself, e.g., '(?s:.)' always enables "dot
|
634
|
+
all" whereas '(?-s:.)' always disables "dot all".
|
635
|
+
|
636
|
+
This flag can be disabled with --no-multiline-dotall.
|
637
|
+
|
638
|
+
--no-config
|
639
|
+
Never read configuration files. When this flag is present, ripgrep will not
|
640
|
+
respect the RIPGREP_CONFIG_PATH environment variable.
|
641
|
+
|
642
|
+
If ripgrep ever grows a feature to automatically read configuration files in
|
643
|
+
pre-defined locations, then this flag will also disable that behavior as well.
|
644
|
+
|
645
|
+
-I, --no-filename
|
646
|
+
Never print the file path with the matched lines. This is the default when
|
647
|
+
ripgrep is explicitly instructed to search one file or stdin.
|
648
|
+
|
649
|
+
This flag overrides --with-filename.
|
650
|
+
|
651
|
+
--no-heading
|
652
|
+
Don't group matches by each file. If --no-heading is provided in addition to
|
653
|
+
the -H/--with-filename flag, then file paths will be printed as a prefix for
|
654
|
+
every matched line. This is the default mode when not printing to a terminal.
|
655
|
+
|
656
|
+
This overrides the --heading flag.
|
657
|
+
|
658
|
+
--no-ignore
|
659
|
+
Don't respect ignore files (.gitignore, .ignore, etc.). This implies
|
660
|
+
--no-ignore-dot, --no-ignore-exclude, --no-ignore-global, no-ignore-parent and
|
661
|
+
--no-ignore-vcs.
|
662
|
+
|
663
|
+
This does *not* imply --no-ignore-files, since --ignore-file is specified
|
664
|
+
explicitly as a command line argument.
|
665
|
+
|
666
|
+
When given only once, the -u flag is identical in behavior to --no-ignore and
|
667
|
+
can be considered an alias. However, subsequent -u flags have additional
|
668
|
+
effects; see --unrestricted.
|
669
|
+
|
670
|
+
This flag can be disabled with the --ignore flag.
|
671
|
+
|
672
|
+
--no-ignore-dot
|
673
|
+
Don't respect .ignore files.
|
674
|
+
|
675
|
+
This does *not* affect whether ripgrep will ignore files and directories
|
676
|
+
whose names begin with a dot. For that, see the -./--hidden flag.
|
677
|
+
|
678
|
+
This flag can be disabled with the --ignore-dot flag.
|
679
|
+
|
680
|
+
--no-ignore-exclude
|
681
|
+
Don't respect ignore files that are manually configured for the repository
|
682
|
+
such as git's '.git/info/exclude'.
|
683
|
+
|
684
|
+
This flag can be disabled with the --ignore-exclude flag.
|
685
|
+
|
686
|
+
--no-ignore-files
|
687
|
+
When set, any --ignore-file flags, even ones that come after this flag, are
|
688
|
+
ignored.
|
689
|
+
|
690
|
+
This flag can be disabled with the --ignore-files flag.
|
691
|
+
|
692
|
+
--no-ignore-global
|
693
|
+
Don't respect ignore files that come from "global" sources such as git's
|
694
|
+
`core.excludesFile` configuration option (which defaults to
|
695
|
+
`$HOME/.config/git/ignore`).
|
696
|
+
|
697
|
+
This flag can be disabled with the --ignore-global flag.
|
698
|
+
|
699
|
+
--no-ignore-messages
|
700
|
+
Suppresses all error messages related to parsing ignore files such as .ignore
|
701
|
+
or .gitignore.
|
702
|
+
|
703
|
+
This flag can be disabled with the --ignore-messages flag.
|
704
|
+
|
705
|
+
--no-ignore-parent
|
706
|
+
Don't respect ignore files (.gitignore, .ignore, etc.) in parent directories.
|
707
|
+
|
708
|
+
This flag can be disabled with the --ignore-parent flag.
|
709
|
+
|
710
|
+
--no-ignore-vcs
|
711
|
+
Don't respect version control ignore files (.gitignore, etc.). This implies
|
712
|
+
--no-ignore-parent for VCS files. Note that .ignore files will continue to be
|
713
|
+
respected.
|
714
|
+
|
715
|
+
This flag can be disabled with the --ignore-vcs flag.
|
716
|
+
|
717
|
+
-N, --no-line-number
|
718
|
+
Suppress line numbers. This is enabled by default when not searching in a
|
719
|
+
terminal.
|
720
|
+
|
721
|
+
--no-messages
|
722
|
+
Suppress all error messages related to opening and reading files. Error
|
723
|
+
messages related to the syntax of the pattern given are still shown.
|
724
|
+
|
725
|
+
This flag can be disabled with the --messages flag.
|
726
|
+
|
727
|
+
--no-mmap
|
728
|
+
Never use memory maps, even when they might be faster.
|
729
|
+
|
730
|
+
This flag overrides --mmap.
|
731
|
+
|
732
|
+
--no-pcre2-unicode
|
733
|
+
DEPRECATED. Use --no-unicode instead.
|
734
|
+
|
735
|
+
This flag is now an alias for --no-unicode. And --pcre2-unicode is an alias
|
736
|
+
for --unicode.
|
737
|
+
|
738
|
+
--no-require-git
|
739
|
+
By default, ripgrep will only respect global gitignore rules, .gitignore rules
|
740
|
+
and local exclude rules if ripgrep detects that you are searching inside a
|
741
|
+
git repository. This flag allows you to relax this restriction such that
|
742
|
+
ripgrep will respect all git related ignore rules regardless of whether you're
|
743
|
+
searching in a git repository or not.
|
744
|
+
|
745
|
+
This flag can be disabled with --require-git.
|
746
|
+
|
747
|
+
--no-unicode
|
748
|
+
By default, ripgrep will enable "Unicode mode" in all of its regexes. This
|
749
|
+
has a number of consequences:
|
750
|
+
|
751
|
+
* '.' will only match valid UTF-8 encoded scalar values.
|
752
|
+
* Classes like '\w', '\s', '\d' are all Unicode aware and much bigger
|
753
|
+
than their ASCII only versions.
|
754
|
+
* Case insensitive matching will use Unicode case folding.
|
755
|
+
* A large array of classes like '\p{Emoji}' are available.
|
756
|
+
* Word boundaries ('\b' and '\B') use the Unicode definition of a word
|
757
|
+
character.
|
758
|
+
|
759
|
+
In some cases it can be desirable to turn these things off. The --no-unicode
|
760
|
+
flag will do exactly that.
|
761
|
+
|
762
|
+
For PCRE2 specifically, Unicode mode represents a critical trade off in the
|
763
|
+
user experience of ripgrep. In particular, unlike the default regex engine,
|
764
|
+
PCRE2 does not support the ability to search possibly invalid UTF-8 with
|
765
|
+
Unicode features enabled. Instead, PCRE2 *requires* that everything it searches
|
766
|
+
when Unicode mode is enabled is valid UTF-8. (Or valid UTF-16/UTF-32, but for
|
767
|
+
the purposes of ripgrep, we only discuss UTF-8.) This means that if you have
|
768
|
+
PCRE2's Unicode mode enabled and you attempt to search invalid UTF-8, then
|
769
|
+
the search for that file will halt and print an error. For this reason, when
|
770
|
+
PCRE2's Unicode mode is enabled, ripgrep will automatically "fix" invalid
|
771
|
+
UTF-8 sequences by replacing them with the Unicode replacement codepoint. This
|
772
|
+
penalty does not occur when using the default regex engine.
|
773
|
+
|
774
|
+
If you would rather see the encoding errors surfaced by PCRE2 when Unicode mode
|
775
|
+
is enabled, then pass the --no-encoding flag to disable all transcoding.
|
776
|
+
|
777
|
+
The --no-unicode flag can be disabled with --unicode. Note that
|
778
|
+
--no-pcre2-unicode and --pcre2-unicode are aliases for --no-unicode and
|
779
|
+
--unicode, respectively.
|
780
|
+
|
781
|
+
-0, --null
|
782
|
+
Whenever a file path is printed, follow it with a NUL byte. This includes
|
783
|
+
printing file paths before matches, and when printing a list of matching files
|
784
|
+
such as with --count, --files-with-matches and --files. This option is useful
|
785
|
+
for use with xargs.
|
786
|
+
|
787
|
+
--null-data
|
788
|
+
Enabling this option causes ripgrep to use NUL as a line terminator instead of
|
789
|
+
the default of '\n'.
|
790
|
+
|
791
|
+
This is useful when searching large binary files that would otherwise have very
|
792
|
+
long lines if '\n' were used as the line terminator. In particular, ripgrep
|
793
|
+
requires that, at a minimum, each line must fit into memory. Using NUL instead
|
794
|
+
can be a useful stopgap to keep memory requirements low and avoid OOM (out of
|
795
|
+
memory) conditions.
|
796
|
+
|
797
|
+
This is also useful for processing NUL delimited data, such as that emitted
|
798
|
+
when using ripgrep's -0/--null flag or find's --print0 flag.
|
799
|
+
|
800
|
+
Using this flag implies -a/--text.
|
801
|
+
|
802
|
+
--one-file-system
|
803
|
+
When enabled, ripgrep will not cross file system boundaries relative to where
|
804
|
+
the search started from.
|
805
|
+
|
806
|
+
Note that this applies to each path argument given to ripgrep. For example, in
|
807
|
+
the command 'rg --one-file-system /foo/bar /quux/baz', ripgrep will search both
|
808
|
+
'/foo/bar' and '/quux/baz' even if they are on different file systems, but will
|
809
|
+
not cross a file system boundary when traversing each path's directory tree.
|
810
|
+
|
811
|
+
This is similar to find's '-xdev' or '-mount' flag.
|
812
|
+
|
813
|
+
This flag can be disabled with --no-one-file-system.
|
814
|
+
|
815
|
+
-o, --only-matching
|
816
|
+
Print only the matched (non-empty) parts of a matching line, with each such
|
817
|
+
part on a separate output line.
|
818
|
+
|
819
|
+
--passthru
|
820
|
+
Print both matching and non-matching lines.
|
821
|
+
|
822
|
+
Another way to achieve a similar effect is by modifying your pattern to match
|
823
|
+
the empty string. For example, if you are searching using 'rg foo' then using
|
824
|
+
'rg "^|foo"' instead will emit every line in every file searched, but only
|
825
|
+
occurrences of 'foo' will be highlighted. This flag enables the same behavior
|
826
|
+
without needing to modify the pattern.
|
827
|
+
|
828
|
+
This overrides the --context, --after-context and --before-context flags.
|
829
|
+
|
830
|
+
--path-separator <SEPARATOR>
|
831
|
+
Set the path separator to use when printing file paths. This defaults to your
|
832
|
+
platform's path separator, which is / on Unix and \ on Windows. This flag is
|
833
|
+
intended for overriding the default when the environment demands it (e.g.,
|
834
|
+
cygwin). A path separator is limited to a single byte.
|
835
|
+
|
836
|
+
-P, --pcre2
|
837
|
+
When this flag is present, ripgrep will use the PCRE2 regex engine instead of
|
838
|
+
its default regex engine.
|
839
|
+
|
840
|
+
This is generally useful when you want to use features such as look-around
|
841
|
+
or backreferences.
|
842
|
+
|
843
|
+
Note that PCRE2 is an optional ripgrep feature. If PCRE2 wasn't included in
|
844
|
+
your build of ripgrep, then using this flag will result in ripgrep printing
|
845
|
+
an error message and exiting. PCRE2 may also have worse user experience in
|
846
|
+
some cases, since it has fewer introspection APIs than ripgrep's default regex
|
847
|
+
engine. For example, if you use a '\n' in a PCRE2 regex without the
|
848
|
+
'-U/--multiline' flag, then ripgrep will silently fail to match anything
|
849
|
+
instead of reporting an error immediately (like it does with the default
|
850
|
+
regex engine).
|
851
|
+
|
852
|
+
Related flags: --no-pcre2-unicode
|
853
|
+
|
854
|
+
This flag can be disabled with --no-pcre2.
|
855
|
+
|
856
|
+
--pcre2-version
|
857
|
+
When this flag is present, ripgrep will print the version of PCRE2 in use,
|
858
|
+
along with other information, and then exit. If PCRE2 is not available, then
|
859
|
+
ripgrep will print an error message and exit with an error code.
|
860
|
+
|
861
|
+
--pre <COMMAND>
|
862
|
+
For each input FILE, search the standard output of COMMAND FILE rather than the
|
863
|
+
contents of FILE. This option expects the COMMAND program to either be an
|
864
|
+
absolute path or to be available in your PATH. Either an empty string COMMAND
|
865
|
+
or the '--no-pre' flag will disable this behavior.
|
866
|
+
|
867
|
+
WARNING: When this flag is set, ripgrep will unconditionally spawn a
|
868
|
+
process for every file that is searched. Therefore, this can incur an
|
869
|
+
unnecessarily large performance penalty if you don't otherwise need the
|
870
|
+
flexibility offered by this flag. One possible mitigation to this is to use
|
871
|
+
the '--pre-glob' flag to limit which files a preprocessor is run with.
|
872
|
+
|
873
|
+
A preprocessor is not run when ripgrep is searching stdin.
|
874
|
+
|
875
|
+
When searching over sets of files that may require one of several decoders
|
876
|
+
as preprocessors, COMMAND should be a wrapper program or script which first
|
877
|
+
classifies FILE based on magic numbers/content or based on the FILE name and
|
878
|
+
then dispatches to an appropriate preprocessor. Each COMMAND also has its
|
879
|
+
standard input connected to FILE for convenience.
|
880
|
+
|
881
|
+
For example, a shell script for COMMAND might look like:
|
882
|
+
|
883
|
+
case "$1" in
|
884
|
+
*.pdf)
|
885
|
+
exec pdftotext "$1" -
|
886
|
+
;;
|
887
|
+
*)
|
888
|
+
case $(file "$1") in
|
889
|
+
*Zstandard*)
|
890
|
+
exec pzstd -cdq
|
891
|
+
;;
|
892
|
+
*)
|
893
|
+
exec cat
|
894
|
+
;;
|
895
|
+
esac
|
896
|
+
;;
|
897
|
+
esac
|
898
|
+
|
899
|
+
The above script uses `pdftotext` to convert a PDF file to plain text. For
|
900
|
+
all other files, the script uses the `file` utility to sniff the type of the
|
901
|
+
file based on its contents. If it is a compressed file in the Zstandard format,
|
902
|
+
then `pzstd` is used to decompress the contents to stdout.
|
903
|
+
|
904
|
+
This overrides the -z/--search-zip flag.
|
905
|
+
|
906
|
+
--pre-glob <GLOB>...
|
907
|
+
This flag works in conjunction with the --pre flag. Namely, when one or more
|
908
|
+
--pre-glob flags are given, then only files that match the given set of globs
|
909
|
+
will be handed to the command specified by the --pre flag. Any non-matching
|
910
|
+
files will be searched without using the preprocessor command.
|
911
|
+
|
912
|
+
This flag is useful when searching many files with the --pre flag. Namely,
|
913
|
+
it permits the ability to avoid process overhead for files that don't need
|
914
|
+
preprocessing. For example, given the following shell script, 'pre-pdftotext':
|
915
|
+
|
916
|
+
#!/bin/sh
|
917
|
+
|
918
|
+
pdftotext "$1" -
|
919
|
+
|
920
|
+
then it is possible to use '--pre pre-pdftotext --pre-glob '*.pdf'' to make
|
921
|
+
it so ripgrep only executes the 'pre-pdftotext' command on files with a '.pdf'
|
922
|
+
extension.
|
923
|
+
|
924
|
+
Multiple --pre-glob flags may be used. Globbing rules match .gitignore globs.
|
925
|
+
Precede a glob with a ! to exclude it.
|
926
|
+
|
927
|
+
This flag has no effect if the --pre flag is not used.
|
928
|
+
|
929
|
+
-p, --pretty
|
930
|
+
This is a convenience alias for '--color always --heading --line-number'. This
|
931
|
+
flag is useful when you still want pretty output even if you're piping ripgrep
|
932
|
+
to another program or file. For example: 'rg -p foo | less -R'.
|
933
|
+
|
934
|
+
-q, --quiet
|
935
|
+
Do not print anything to stdout. If a match is found in a file, then ripgrep
|
936
|
+
will stop searching. This is useful when ripgrep is used only for its exit
|
937
|
+
code (which will be an error if no matches are found).
|
938
|
+
|
939
|
+
When --files is used, then ripgrep will stop finding files after finding the
|
940
|
+
first file that matches all ignore rules.
|
941
|
+
|
942
|
+
--regex-size-limit <NUM+SUFFIX?>
|
943
|
+
The upper size limit of the compiled regex. The default limit is 10M.
|
944
|
+
|
945
|
+
The argument accepts the same size suffixes as allowed in the --max-filesize
|
946
|
+
flag.
|
947
|
+
|
948
|
+
-e, --regexp <PATTERN>...
|
949
|
+
A pattern to search for. This option can be provided multiple times, where
|
950
|
+
all patterns given are searched. Lines matching at least one of the provided
|
951
|
+
patterns are printed. This flag can also be used when searching for patterns
|
952
|
+
that start with a dash.
|
953
|
+
|
954
|
+
For example, to search for the literal '-foo', you can use this flag:
|
955
|
+
|
956
|
+
rg -e -foo
|
957
|
+
|
958
|
+
You can also use the special '--' delimiter to indicate that no more flags
|
959
|
+
will be provided. Namely, the following is equivalent to the above:
|
960
|
+
|
961
|
+
rg -- -foo
|
962
|
+
|
963
|
+
-r, --replace <REPLACEMENT_TEXT>
|
964
|
+
Replace every match with the text given when printing results. Neither this
|
965
|
+
flag nor any other ripgrep flag will modify your files.
|
966
|
+
|
967
|
+
Capture group indices (e.g., $5) and names (e.g., $foo) are supported in the
|
968
|
+
replacement string. Capture group indices are numbered based on the position of
|
969
|
+
the opening parenthesis of the group, where the leftmost such group is $1. The
|
970
|
+
special $0 group corresponds to the entire match.
|
971
|
+
|
972
|
+
In shells such as Bash and zsh, you should wrap the pattern in single quotes
|
973
|
+
instead of double quotes. Otherwise, capture group indices will be replaced by
|
974
|
+
expanded shell variables which will most likely be empty.
|
975
|
+
|
976
|
+
To write a literal '$', use '$$'.
|
977
|
+
|
978
|
+
Note that the replacement by default replaces each match, and NOT the entire
|
979
|
+
line. To replace the entire line, you should match the entire line.
|
980
|
+
|
981
|
+
This flag can be used with the -o/--only-matching flag.
|
982
|
+
|
983
|
+
-z, --search-zip
|
984
|
+
Search in compressed files. Currently gzip, bzip2, xz, LZ4, LZMA, Brotli and
|
985
|
+
Zstd files are supported. This option expects the decompression binaries to be
|
986
|
+
available in your PATH.
|
987
|
+
|
988
|
+
This flag can be disabled with --no-search-zip.
|
989
|
+
|
990
|
+
-S, --smart-case
|
991
|
+
Searches case insensitively if the pattern is all lowercase. Search case
|
992
|
+
sensitively otherwise.
|
993
|
+
|
994
|
+
A pattern is considered all lowercase if both of the following rules hold:
|
995
|
+
|
996
|
+
First, the pattern contains at least one literal character. For example, 'a\w'
|
997
|
+
contains a literal ('a') but just '\w' does not.
|
998
|
+
|
999
|
+
Second, of the literals in the pattern, none of them are considered to be
|
1000
|
+
uppercase according to Unicode. For example, 'foo\pL' has no uppercase
|
1001
|
+
literals but 'Foo\pL' does.
|
1002
|
+
|
1003
|
+
This overrides the -s/--case-sensitive and -i/--ignore-case flags.
|
1004
|
+
|
1005
|
+
--sort <SORTBY>
|
1006
|
+
This flag enables sorting of results in ascending order. The possible values
|
1007
|
+
for this flag are:
|
1008
|
+
|
1009
|
+
none (Default) Do not sort results. Fastest. Can be multi-threaded.
|
1010
|
+
path Sort by file path. Always single-threaded.
|
1011
|
+
modified Sort by the last modified time on a file. Always single-threaded.
|
1012
|
+
accessed Sort by the last accessed time on a file. Always single-threaded.
|
1013
|
+
created Sort by the creation time on a file. Always single-threaded.
|
1014
|
+
|
1015
|
+
If the chosen (manually or by-default) sorting criteria isn't available on your
|
1016
|
+
system (for example, creation time is not available on ext4 file systems), then
|
1017
|
+
ripgrep will attempt to detect this, print an error and exit without searching.
|
1018
|
+
|
1019
|
+
To sort results in reverse or descending order, use the --sortr flag. Also,
|
1020
|
+
this flag overrides --sortr.
|
1021
|
+
|
1022
|
+
Note that sorting results currently always forces ripgrep to abandon
|
1023
|
+
parallelism and run in a single thread.
|
1024
|
+
|
1025
|
+
--sortr <SORTBY>
|
1026
|
+
This flag enables sorting of results in descending order. The possible values
|
1027
|
+
for this flag are:
|
1028
|
+
|
1029
|
+
none (Default) Do not sort results. Fastest. Can be multi-threaded.
|
1030
|
+
path Sort by file path. Always single-threaded.
|
1031
|
+
modified Sort by the last modified time on a file. Always single-threaded.
|
1032
|
+
accessed Sort by the last accessed time on a file. Always single-threaded.
|
1033
|
+
created Sort by the creation time on a file. Always single-threaded.
|
1034
|
+
|
1035
|
+
If the chosen (manually or by-default) sorting criteria isn't available on your
|
1036
|
+
system (for example, creation time is not available on ext4 file systems), then
|
1037
|
+
ripgrep will attempt to detect this, print an error and exit without searching.
|
1038
|
+
|
1039
|
+
To sort results in ascending order, use the --sort flag. Also, this flag
|
1040
|
+
overrides --sort.
|
1041
|
+
|
1042
|
+
Note that sorting results currently always forces ripgrep to abandon
|
1043
|
+
parallelism and run in a single thread.
|
1044
|
+
|
1045
|
+
--stats
|
1046
|
+
Print aggregate statistics about this ripgrep search. When this flag is
|
1047
|
+
present, ripgrep will print the following stats to stdout at the end of the
|
1048
|
+
search: number of matched lines, number of files with matches, number of files
|
1049
|
+
searched, and the time taken for the entire search to complete.
|
1050
|
+
|
1051
|
+
This set of aggregate statistics may expand over time.
|
1052
|
+
|
1053
|
+
Note that this flag has no effect if --files, --files-with-matches or
|
1054
|
+
--files-without-match is passed.
|
1055
|
+
|
1056
|
+
This flag can be disabled with --no-stats.
|
1057
|
+
|
1058
|
+
-a, --text
|
1059
|
+
Search binary files as if they were text. When this flag is present, ripgrep's
|
1060
|
+
binary file detection is disabled. This means that when a binary file is
|
1061
|
+
searched, its contents may be printed if there is a match. This may cause
|
1062
|
+
escape codes to be printed that alter the behavior of your terminal.
|
1063
|
+
|
1064
|
+
When binary file detection is enabled it is imperfect. In general, it uses
|
1065
|
+
a simple heuristic. If a NUL byte is seen during search, then the file is
|
1066
|
+
considered binary and search stops (unless this flag is present).
|
1067
|
+
Alternatively, if the '--binary' flag is used, then ripgrep will only quit
|
1068
|
+
when it sees a NUL byte after it sees a match (or searches the entire file).
|
1069
|
+
|
1070
|
+
This flag can be disabled with '--no-text'. It overrides the '--binary' flag.
|
1071
|
+
|
1072
|
+
-j, --threads <NUM>
|
1073
|
+
The approximate number of threads to use. A value of 0 (which is the default)
|
1074
|
+
causes ripgrep to choose the thread count using heuristics.
|
1075
|
+
|
1076
|
+
--trim
|
1077
|
+
When set, all ASCII whitespace at the beginning of each line printed will be
|
1078
|
+
trimmed.
|
1079
|
+
|
1080
|
+
This flag can be disabled with --no-trim.
|
1081
|
+
|
1082
|
+
-t, --type <TYPE>...
|
1083
|
+
Only search files matching TYPE. Multiple type flags may be provided. Use the
|
1084
|
+
--type-list flag to list all available types.
|
1085
|
+
|
1086
|
+
This flag supports the special value 'all', which will behave as if --type
|
1087
|
+
was provided for every file type supported by ripgrep (including any custom
|
1088
|
+
file types). The end result is that '--type all' causes ripgrep to search in
|
1089
|
+
"whitelist" mode, where it will only search files it recognizes via its type
|
1090
|
+
definitions.
|
1091
|
+
|
1092
|
+
--type-add <TYPE_SPEC>...
|
1093
|
+
Add a new glob for a particular file type. Only one glob can be added at a
|
1094
|
+
time. Multiple --type-add flags can be provided. Unless --type-clear is used,
|
1095
|
+
globs are added to any existing globs defined inside of ripgrep.
|
1096
|
+
|
1097
|
+
Note that this MUST be passed to every invocation of ripgrep. Type settings are
|
1098
|
+
NOT persisted. See CONFIGURATION FILES for a workaround.
|
1099
|
+
|
1100
|
+
Example:
|
1101
|
+
|
1102
|
+
rg --type-add 'foo:*.foo' -tfoo PATTERN.
|
1103
|
+
|
1104
|
+
--type-add can also be used to include rules from other types with the special
|
1105
|
+
include directive. The include directive permits specifying one or more other
|
1106
|
+
type names (separated by a comma) that have been defined and its rules will
|
1107
|
+
automatically be imported into the type specified. For example, to create a
|
1108
|
+
type called src that matches C++, Python and Markdown files, one can use:
|
1109
|
+
|
1110
|
+
--type-add 'src:include:cpp,py,md'
|
1111
|
+
|
1112
|
+
Additional glob rules can still be added to the src type by using the
|
1113
|
+
--type-add flag again:
|
1114
|
+
|
1115
|
+
--type-add 'src:include:cpp,py,md' --type-add 'src:*.foo'
|
1116
|
+
|
1117
|
+
Note that type names must consist only of Unicode letters or numbers.
|
1118
|
+
Punctuation characters are not allowed.
|
1119
|
+
|
1120
|
+
--type-clear <TYPE>...
|
1121
|
+
Clear the file type globs previously defined for TYPE. This only clears the
|
1122
|
+
default type definitions that are found inside of ripgrep.
|
1123
|
+
|
1124
|
+
Note that this MUST be passed to every invocation of ripgrep. Type settings are
|
1125
|
+
NOT persisted. See CONFIGURATION FILES for a workaround.
|
1126
|
+
|
1127
|
+
--type-list
|
1128
|
+
Show all supported file types and their corresponding globs.
|
1129
|
+
|
1130
|
+
-T, --type-not <TYPE>...
|
1131
|
+
Do not search files matching TYPE. Multiple type-not flags may be provided. Use
|
1132
|
+
the --type-list flag to list all available types.
|
1133
|
+
|
1134
|
+
-u, --unrestricted
|
1135
|
+
Reduce the level of "smart" searching. A single -u won't respect .gitignore
|
1136
|
+
(etc.) files (--no-ignore). Two -u flags will additionally search hidden files
|
1137
|
+
and directories (-./--hidden). Three -u flags will additionally search binary
|
1138
|
+
files (--binary).
|
1139
|
+
|
1140
|
+
'rg -uuu' is roughly equivalent to 'grep -r'.
|
1141
|
+
|
1142
|
+
-V, --version
|
1143
|
+
Prints version information
|
1144
|
+
|
1145
|
+
--vimgrep
|
1146
|
+
Show results with every match on its own line, including line numbers and
|
1147
|
+
column numbers. With this option, a line with more than one match will be
|
1148
|
+
printed more than once.
|
1149
|
+
|
1150
|
+
-H, --with-filename
|
1151
|
+
Display the file path for matches. This is the default when more than one
|
1152
|
+
file is searched. If --heading is enabled (the default when printing to a
|
1153
|
+
terminal), the file path will be shown above clusters of matches from each
|
1154
|
+
file; otherwise, the file name will be shown as a prefix for each matched line.
|
1155
|
+
|
1156
|
+
This flag overrides --no-filename.
|
1157
|
+
|
1158
|
+
-w, --word-regexp
|
1159
|
+
Only show matches surrounded by word boundaries. This is roughly equivalent to
|
1160
|
+
putting \b before and after all of the search patterns.
|
1161
|
+
|
1162
|
+
This overrides the --line-regexp flag.
|
1163
|
+
|