Use :Ggrep -q to eschew output in favor of quickfix window

The q works on 2 levels!
This commit is contained in:
Tim Pope
2021-08-20 00:30:53 -04:00
parent e716ebdda9
commit 86a45846fc

View File

@@ -5210,9 +5210,10 @@ endfunction
function! s:GrepSubcommand(line1, line2, range, bang, mods, options) abort function! s:GrepSubcommand(line1, line2, range, bang, mods, options) abort
let args = copy(a:options.subcommand_args) let args = copy(a:options.subcommand_args)
let handle = -1 let handle = -1
let quiet = 0
let i = 0 let i = 0
while i < len(args) && args[i] !=# '--' while i < len(args) && args[i] !=# '--'
let partition = matchstr(args[i], '^-' . s:grep_combine_flags . '\zeO') let partition = matchstr(args[i], '^-' . s:grep_combine_flags . '\ze[qO]')
if len(partition) > 1 if len(partition) > 1
call insert(args, '-' . strpart(args[i], len(partition)), i+1) call insert(args, '-' . strpart(args[i], len(partition)), i+1)
let args[i] = partition let args[i] = partition
@@ -5224,6 +5225,14 @@ function! s:GrepSubcommand(line1, line2, range, bang, mods, options) abort
continue continue
elseif args[i] =~# '^\%(-O\|--open-files-in-pager=\)' elseif args[i] =~# '^\%(-O\|--open-files-in-pager=\)'
let handle = 0 let handle = 0
elseif args[i] =~# '^-q.'
let args[i] = '-' . args[i][2:-1]
let quiet = 1
elseif args[i] =~# '^\%(-q\|--quiet\)$'
let quiet = 1
call remove(args, i)
elseif args[i] =~# '^--no-quiet$'
let quiet = 0
elseif args[i] =~# '^\%(--heading\)$' elseif args[i] =~# '^\%(--heading\)$'
call remove(args, i) call remove(args, i)
continue continue
@@ -5259,18 +5268,20 @@ function! s:GrepSubcommand(line1, line2, range, bang, mods, options) abort
let event = listnr < 0 ? 'grep-fugitive' : 'lgrep-fugitive' let event = listnr < 0 ? 'grep-fugitive' : 'lgrep-fugitive'
silent exe s:DoAutocmd('QuickFixCmdPre ' . event) silent exe s:DoAutocmd('QuickFixCmdPre ' . event)
try try
if &more if !quiet && &more
let more = 1 let more = 1
set nomore set nomore
endif endif
if !quiet
echo title echo title
endif
let list = s:SystemList(s:UserCommandList(a:options) + cmd + args)[0] let list = s:SystemList(s:UserCommandList(a:options) + cmd + args)[0]
call writefile(list + [''], tempfile, 'b') call writefile(list + [''], tempfile, 'b')
call s:RunSave(state) call s:RunSave(state)
call map(list, 's:GrepParseLine(options, 0, dir, v:val)') call map(list, 's:GrepParseLine(options, ' . quiet . ', dir, v:val)')
call s:QuickfixSet(listnr, list, 'a') call s:QuickfixSet(listnr, list, 'a')
let press_enter_shortfall = &cmdheight - len(list) let press_enter_shortfall = &cmdheight - len(list)
if press_enter_shortfall > 0 if press_enter_shortfall > 0 && !quiet
echo repeat("\n", press_enter_shortfall - 1) echo repeat("\n", press_enter_shortfall - 1)
endif endif
finally finally
@@ -5280,6 +5291,13 @@ function! s:GrepSubcommand(line1, line2, range, bang, mods, options) abort
endtry endtry
call s:RunFinished(state) call s:RunFinished(state)
silent exe s:DoAutocmd('QuickFixCmdPost ' . event) silent exe s:DoAutocmd('QuickFixCmdPost ' . event)
if quiet
let bufnr = bufnr('')
silent exe substitute(s:Mods(a:mods), '\<tab\>', '', '') (listnr < 0 ? 'c' : 'l').'open'
if bufnr != bufnr('')
wincmd p
endif
end
if !a:bang && !empty(list) if !a:bang && !empty(list)
return 'silent ' . (listnr < 0 ? 'c' : 'l').'first' return 'silent ' . (listnr < 0 ? 'c' : 'l').'first'
else else