ripgrep 14.0.0
ripgrep 14 is a new major version release of ripgrep that has some new features, performance improvements and a lot of bug fixes.
In case you haven't heard of it before, ripgrep is a line-oriented search tool that recursively searches the current directory for a regex pattern. By default, ripgrep will respect gitignore rules and automatically skip hidden files/directories and binary files.
The headlining feature in this release is hyperlink support. In this release,
they are an opt-in feature but may change to an opt-out feature in the future.
To enable them, try passing --hyperlink-format default. If you use VS Code,
then try passing --hyperlink-format vscode. Please report your experience
with hyperlinks, positive or negative.
Another headlining development in this release is that it contains a rewrite of its regex engine. You generally shouldn't notice any changes, except for some searches may get faster. You can read more about the regex engine rewrite on my blog. Please report your performance improvements or regressions that you notice.
Finally, ripgrep switched the library it uses for argument parsing. Users
should not notice a difference in most cases (error messages have changed
somewhat), but flag overrides should generally be more consistent. For example,
things like --no-ignore --ignore-vcs work as one would expect (disables all
filtering related to ignore rules except for rules found in version control
systems such as git).
BREAKING CHANGES:
rg -C1 -A2used to be equivalent torg -A2, but now it is equivalent torg -B1 -A2. That is,-Aand-Bno longer completely override-C. Instead, they only partially override-C.
Build process changes:
- ripgrep's shell completions and man page are now created by running ripgrep
with a new
--generateflag. For example,rg --generate manwill write a man page inroffformat on stdout. The release archives have not changed. - The optional build dependency on
asciidocorasciidoctorhas been dropped. Previously, it was used to produce ripgrep's man page. ripgrep now owns this process itself by writingroffdirectly.
Performance improvements:
- PERF #1746: Make some cases with inner literals faster.
- PERF #1760:
Make most searches with
\blook-arounds (among others) much faster. - PERF #2591: Parallel directory traversal now uses work stealing for faster searches.
- PERF #2642: Parallel directory traversal has some contention reduced.
Feature enhancements:
- Added or improved file type filtering for Ada, DITA, Elixir, Fuchsia, Gentoo, Gradle, GraphQL, Markdown, Prolog, Raku, TypeScript, USD, V
- FEATURE #665:
Add a new
--hyperlink-formatflag that turns file paths into hyperlinks. - FEATURE #1709: Improve documentation of ripgrep's behavior when stdout is a tty.
- FEATURE #1737: Provide binaries for Apple silicon.
- FEATURE #1790:
Add new
--stop-on-nonmatchflag. - FEATURE #1814:
Flags are now categorized in
-h/--helpoutput and ripgrep's man page. - FEATURE #1838: An error is shown when searching for NUL bytes with binary detection enabled.
- FEATURE #2195:
When
extra-verbosemode is enabled in zsh, show extra file type info. - FEATURE #2298:
Add instructions for installing ripgrep using
cargo binstall. - FEATURE #2409:
Added installation instructions for
winget. - FEATURE #2425:
Shell completions (and man page) can be created via
rg --generate. - FEATURE #2524:
The
--debugflag now indicates whether stdin or./is being searched. - FEATURE #2643:
Make
-da short flag for--max-depth. - FEATURE #2645:
The
--versionoutput will now also contain PCRE2 availability information.
Bug fixes:
- BUG #884:
Don't error when
-v/--invert-matchis used multiple times. - BUG #1275:
Fix bug with
\bassertion in the regex engine. - BUG #1376:
Using
--no-ignore --ignore-vcsnow works as one would expect. - BUG #1622:
Add note about error messages to
-z/--search-zipdocumentation. - BUG #1648:
Fix bug where sometimes short flags with values, e.g.,
-M 900, would fail. - BUG #1701: Fix bug where some flags could not be repeated.
- BUG #1757: Fix bug when searching a sub-directory didn't have ignores applied correctly.
- BUG #1891:
Fix bug when using
-wwith a regex that can match the empty string. - BUG #1911: Disable mmap searching in all non-64-bit environments.
- BUG #1966: Fix bug where ripgrep can panic when printing to stderr.
- BUG #2046:
Clarify that
--precan accept any kind of path in the documentation. - BUG #2108:
Improve docs for
-r/--replacesyntax. - BUG #2198:
Fix bug where
--no-ignore-dotwould not ignore.rgignore. - BUG #2201:
Improve docs for
-r/--replaceflag. - BUG #2288:
-Aand-Bnow only each partially override-C. - BUG #2236:
Fix gitignore parsing bug where a trailing
\/resulted in an error. - BUG #2243:
Fix
--sortflag for values other thanpath. - BUG #2246:
Add note in
--debuglogs when binary files are ignored. - BUG #2337:
Improve docs to mention that
--statsis always implied by--json. - BUG #2381:
Make
-p/--prettyoverride flags like--no-line-number. - BUG #2392:
Improve global git config parsing of the
excludesFilefield. - BUG #2418:
Clarify sorting semantics of
--sort=path. - BUG #2458:
Make
--trimrun before-M/--max-columnstakes effect. - BUG #2479:
Add documentation about
.ignore/.rgignorefiles in parent directories. - BUG #2480:
Fix bug when using inline regex flags with
-e/--regexp. - BUG #2505:
Improve docs for
--vimgrepby mentioning footguns and some work-arounds. - BUG #2519:
Fix incorrect default value in documentation for
--field-match-separator. - BUG #2523:
Make executable searching take
.cominto account on Windows. - BUG #2574:
Fix bug in
-w/--word-regexpthat would result in incorrect match offsets. - BUG #2623:
Fix a number of bugs with the
-w/--word-regexpflag. - BUG #2636: Strip release binaries for macOS.