feat(defaults): improve :grep defaults #28545

Based on feedback from #28324, pass -H and -I to regular grep
(available on all platforms officially supported by Neovim), and
only pass -uu to ripgrep. This makes :grep ignore binary files by
default in both cases.
This commit is contained in:
Luna Saphie Mittelbach 2024-04-28 18:00:48 +02:00 committed by GitHub
parent 83635e4e3d
commit 513fc46195
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 19 additions and 30 deletions

View File

@ -407,7 +407,8 @@ The following changes to existing APIs or features add new behavior.
correctly without it. (Use |gF| for filepaths suffixed with ":line:col"). correctly without it. (Use |gF| for filepaths suffixed with ":line:col").
• 'comments' includes "fb:•". • 'comments' includes "fb:•".
• 'shortmess' includes the "C" flag. • 'shortmess' includes the "C" flag.
• 'grepprg' defaults to using ripgrep if available. • 'grepprg' uses the -H and -I flags for grep by default,
and defaults to using ripgrep if available.
• |crn| in Normal mode maps to |vim.lsp.buf.rename()|. • |crn| in Normal mode maps to |vim.lsp.buf.rename()|.
• |crr| in Normal and Visual mode maps to |vim.lsp.buf.code_action()|. • |crr| in Normal and Visual mode maps to |vim.lsp.buf.code_action()|.
• "gr" in Normal mode maps to |vim.lsp.buf.references()| |gr-default| • "gr" in Normal mode maps to |vim.lsp.buf.references()| |gr-default|

View File

@ -2861,10 +2861,7 @@ A jump table for the options with a short description can be found at |Q_op|.
line. The placeholder "$*" is allowed to specify where the arguments line. The placeholder "$*" is allowed to specify where the arguments
will be included. Environment variables are expanded |:set_env|. See will be included. Environment variables are expanded |:set_env|. See
|option-backslash| about including spaces and backslashes. |option-backslash| about including spaces and backslashes.
When your "grep" accepts the "-H" argument, use this to make ":grep" Special value: When 'grepprg' is set to "internal" the |:grep| command
also work well with a single file: >vim
set grepprg=grep\ -nH
< Special value: When 'grepprg' is set to "internal" the |:grep| command
works like |:vimgrep|, |:lgrep| like |:lvimgrep|, |:grepadd| like works like |:vimgrep|, |:lgrep| like |:lvimgrep|, |:grepadd| like
|:vimgrepadd| and |:lgrepadd| like |:lvimgrepadd|. |:vimgrepadd| and |:lgrepadd| like |:lvimgrepadd|.
See also the section |:make_makeprg|, since most of the comments there See also the section |:make_makeprg|, since most of the comments there
@ -2872,11 +2869,11 @@ A jump table for the options with a short description can be found at |Q_op|.
This option cannot be set from a |modeline| or in the |sandbox|, for This option cannot be set from a |modeline| or in the |sandbox|, for
security reasons. security reasons.
This option defaults to: This option defaults to:
- `rg --vimgrep -uuu $* ...` if ripgrep is available (|:checkhealth|), - `rg --vimgrep -uu ` if ripgrep is available (|:checkhealth|),
- `grep -n $* /dev/null` on Unix, - `grep -HIn $* /dev/null` on Unix,
- `findstr /n $* nul` on Windows. - `findstr /n $* nul` on Windows.
Ripgrep can perform additional filtering such as using .gitignore rules Ripgrep can perform additional filtering such as using .gitignore rules
and skipping hidden or binary files. This is disabled by default (see the -u option) and skipping hidden files. This is disabled by default (see the -u option)
to more closely match the behaviour of standard grep. to more closely match the behaviour of standard grep.
You can make ripgrep match Vim's case handling using the You can make ripgrep match Vim's case handling using the
-i/--ignore-case and -S/--smart-case options. -i/--ignore-case and -S/--smart-case options.

View File

@ -52,7 +52,8 @@ Defaults *nvim-defaults*
- 'encoding' is UTF-8 (cf. 'fileencoding' for file-content encoding) - 'encoding' is UTF-8 (cf. 'fileencoding' for file-content encoding)
- 'fillchars' defaults (in effect) to "vert:│,fold:·,foldsep:│" - 'fillchars' defaults (in effect) to "vert:│,fold:·,foldsep:│"
- 'formatoptions' defaults to "tcqj" - 'formatoptions' defaults to "tcqj"
- 'grepprg' defaults to using ripgrep if available - 'grepprg' uses the -H and -I flags for regular grep,
and defaults to using ripgrep if available
- 'hidden' is enabled - 'hidden' is enabled
- 'history' defaults to 10000 (the maximum) - 'history' defaults to 10000 (the maximum)
- 'hlsearch' is enabled - 'hlsearch' is enabled

View File

@ -560,9 +560,8 @@ end
do do
--- Default 'grepprg' to ripgrep if available. --- Default 'grepprg' to ripgrep if available.
if vim.fn.executable('rg') == 1 then if vim.fn.executable('rg') == 1 then
-- Match :grep default, otherwise rg searches cwd by default -- Use -uu to make ripgrep not check ignore files/skip dot-files
-- Use -uuu to make ripgrep not do its default filtering vim.o.grepprg = 'rg --vimgrep -uu '
vim.o.grepprg = 'rg --vimgrep -uuu $* ' .. (vim.fn.has('unix') == 1 and '/dev/null' or 'nul')
vim.o.grepformat = '%f:%l:%c:%m' vim.o.grepformat = '%f:%l:%c:%m'
end end
end end

View File

@ -2638,12 +2638,6 @@ vim.go.gfm = vim.go.grepformat
--- line. The placeholder "$*" is allowed to specify where the arguments --- line. The placeholder "$*" is allowed to specify where the arguments
--- will be included. Environment variables are expanded `:set_env`. See --- will be included. Environment variables are expanded `:set_env`. See
--- `option-backslash` about including spaces and backslashes. --- `option-backslash` about including spaces and backslashes.
--- When your "grep" accepts the "-H" argument, use this to make ":grep"
--- also work well with a single file:
---
--- ```vim
--- set grepprg=grep\ -nH
--- ```
--- Special value: When 'grepprg' is set to "internal" the `:grep` command --- Special value: When 'grepprg' is set to "internal" the `:grep` command
--- works like `:vimgrep`, `:lgrep` like `:lvimgrep`, `:grepadd` like --- works like `:vimgrep`, `:lgrep` like `:lvimgrep`, `:grepadd` like
--- `:vimgrepadd` and `:lgrepadd` like `:lvimgrepadd`. --- `:vimgrepadd` and `:lgrepadd` like `:lvimgrepadd`.
@ -2652,18 +2646,18 @@ vim.go.gfm = vim.go.grepformat
--- This option cannot be set from a `modeline` or in the `sandbox`, for --- This option cannot be set from a `modeline` or in the `sandbox`, for
--- security reasons. --- security reasons.
--- This option defaults to: --- This option defaults to:
--- - `rg --vimgrep -uuu $* ...` if ripgrep is available (`:checkhealth`), --- - `rg --vimgrep -uu ` if ripgrep is available (`:checkhealth`),
--- - `grep -n $* /dev/null` on Unix, --- - `grep -HIn $* /dev/null` on Unix,
--- - `findstr /n $* nul` on Windows. --- - `findstr /n $* nul` on Windows.
--- Ripgrep can perform additional filtering such as using .gitignore rules --- Ripgrep can perform additional filtering such as using .gitignore rules
--- and skipping hidden or binary files. This is disabled by default (see the -u option) --- and skipping hidden files. This is disabled by default (see the -u option)
--- to more closely match the behaviour of standard grep. --- to more closely match the behaviour of standard grep.
--- You can make ripgrep match Vim's case handling using the --- You can make ripgrep match Vim's case handling using the
--- -i/--ignore-case and -S/--smart-case options. --- -i/--ignore-case and -S/--smart-case options.
--- An `OptionSet` autocmd can be used to set it up to match automatically. --- An `OptionSet` autocmd can be used to set it up to match automatically.
--- ---
--- @type string --- @type string
vim.o.grepprg = "grep -n $* /dev/null" vim.o.grepprg = "grep -HIn $* /dev/null"
vim.o.gp = vim.o.grepprg vim.o.gp = vim.o.grepprg
vim.bo.grepprg = vim.o.grepprg vim.bo.grepprg = vim.o.grepprg
vim.bo.gp = vim.bo.grepprg vim.bo.gp = vim.bo.grepprg

View File

@ -3382,7 +3382,7 @@ return {
abbreviation = 'gp', abbreviation = 'gp',
defaults = { defaults = {
condition = 'MSWIN', condition = 'MSWIN',
if_false = 'grep -n $* /dev/null', if_false = 'grep -HIn $* /dev/null',
if_true = 'findstr /n $* nul', if_true = 'findstr /n $* nul',
doc = [[see below]], doc = [[see below]],
}, },
@ -3392,10 +3392,7 @@ return {
line. The placeholder "$*" is allowed to specify where the arguments line. The placeholder "$*" is allowed to specify where the arguments
will be included. Environment variables are expanded |:set_env|. See will be included. Environment variables are expanded |:set_env|. See
|option-backslash| about including spaces and backslashes. |option-backslash| about including spaces and backslashes.
When your "grep" accepts the "-H" argument, use this to make ":grep" Special value: When 'grepprg' is set to "internal" the |:grep| command
also work well with a single file: >vim
set grepprg=grep\ -nH
< Special value: When 'grepprg' is set to "internal" the |:grep| command
works like |:vimgrep|, |:lgrep| like |:lvimgrep|, |:grepadd| like works like |:vimgrep|, |:lgrep| like |:lvimgrep|, |:grepadd| like
|:vimgrepadd| and |:lgrepadd| like |:lvimgrepadd|. |:vimgrepadd| and |:lgrepadd| like |:lvimgrepadd|.
See also the section |:make_makeprg|, since most of the comments there See also the section |:make_makeprg|, since most of the comments there
@ -3403,11 +3400,11 @@ return {
This option cannot be set from a |modeline| or in the |sandbox|, for This option cannot be set from a |modeline| or in the |sandbox|, for
security reasons. security reasons.
This option defaults to: This option defaults to:
- `rg --vimgrep -uuu $* ...` if ripgrep is available (|:checkhealth|), - `rg --vimgrep -uu ` if ripgrep is available (|:checkhealth|),
- `grep -n $* /dev/null` on Unix, - `grep -HIn $* /dev/null` on Unix,
- `findstr /n $* nul` on Windows. - `findstr /n $* nul` on Windows.
Ripgrep can perform additional filtering such as using .gitignore rules Ripgrep can perform additional filtering such as using .gitignore rules
and skipping hidden or binary files. This is disabled by default (see the -u option) and skipping hidden files. This is disabled by default (see the -u option)
to more closely match the behaviour of standard grep. to more closely match the behaviour of standard grep.
You can make ripgrep match Vim's case handling using the You can make ripgrep match Vim's case handling using the
-i/--ignore-case and -S/--smart-case options. -i/--ignore-case and -S/--smart-case options.