
Eu uso a janela quickfix para agregar resultados de pesquisa de arquivos grep
. No entanto, às vezes quero poder voltar a alguns dos resultados. Existe uma maneira de criar outra janela de correção rápida onde eu possa colar as linhas e referenciá-las mais tarde?
Obrigado
Responder1
O Vim é enviado com o:help cfilter-plugin
isso permite que vocêremoverentradas de correção rápida que você não deseja mais, então funciona ao contrário.
Alternativamente, você pode criar uma nova lista de correções rápidas baseada na atual, já que o Vim mantém uma pilha delas (cp.:help :colder
). No entanto, se você quiser selecionar várias entradas interativamente, isso será complicado, criar uma nova lista na primeira vez e recuperar essa lista mais recente nas vezes seguintes.
Então você poderia usar habilmente olocation-list
em vez de; funciona exatamente como o quickfix, mas é local em uma janela (aqui: a janela do quickfix).
Para copiar toda a entrada atual sem analisá-la novamente, o comando de baixo nívelgetqflist()
esetloclist()
pode ser usado:
:call setloclist(0, [getqflist()[line('.') - 1]], 'a')
| | | |
| | | +-- ... and append
| | +-- select the current one
| +-- entries from the quickfix list
+-- Location list for the current window ...
Você pode vincular isso a uma chave acrescentando nnoremap <LocalLeader>ql
e colocando a definição de mapeamento em ~/.vim/after/ftplugin/qf.vim
.
Solução de plug-in
Aqui está um plugin completo que também suporta contagem, repetição via .
, modo visual e coleta de entradas da lista de localização na lista de correção rápida. Isso requer meuplugin da biblioteca ingo, 1.040 ou superior, atualmente disponível apenas como instantâneo do desenvolvedor emGitHub. Também pode ser copiado para ~/.vim/after/ftplugin/qf.vim
:
function! s:Mapping( mappingType, sourceType, targetType, startLnum, endLnum ) abort
if ingo#window#quickfix#IsQuickfixList(1) != a:sourceType
call ingo#err#Set(printf('Not in a %s list', (a:sourceType == 1 ? 'quickfix' : 'location')))
return 0
endif
let l:qfEntries = ingo#window#quickfix#GetList()[(a:startLnum - 1) : (a:endLnum - 1)]
if empty(l:qfEntries)
call ingo#err#Set('No entries')
return 0
endif
silent call ingo#event#Trigger(printf('QuickFixCmdPre %scopy', ingo#window#quickfix#GetPrefix(a:targetType)))
call ingo#window#quickfix#SetOtherList(a:targetType, l:qfEntries, 'a')
silent call ingo#event#Trigger(printf('QuickFixCmdPost %scopy', ingo#window#quickfix#GetPrefix(a:targetType)))
echomsg printf('%s entr%s copied to %s', len(l:qfEntries), (len(l:qfEntries) == 1 ? 'y' : 'ies'), ingo#window#quickfix#GetName(a:targetType))
let l:mappingPrefix = "\<Plug>(QuickfixCopyTo" . a:mappingType
silent! call repeat#set(l:mappingPrefix . 'Lines)', len(l:qfEntries))
silent! call visualrepeat#set(l:mappingPrefix . 'Selection)', len(l:qfEntries))
return 1
endfunction
" [N]<LocalLeader>qc Copy the current [N] location list entries to the
" quickfix list.
" [N]<LocalLeader>ql Copy the current [N] quickfix entries to a location list
" (for the current quickfix window).
nnoremap <buffer> <silent> <Plug>(QuickfixCopyToQuickfixLines) :<C-u>if ! <SID>Mapping('Quickfix', 2, 1, line('.'), line('.') + v:count1 - 1)<Bar>echoerr ingo#err#Get()<Bar>endif<CR>
xnoremap <buffer> <silent> <Plug>(QuickfixCopyToQuickfixSelection) :<C-u>if ! <SID>Mapping('Quickfix', 2, 1, line("'<"), line("'>"))<Bar>echoerr ingo#err#Get()<Bar>endif<CR>
nnoremap <buffer> <silent> <Plug>(QuickfixCopyToLocListLines) :<C-u>if ! <SID>Mapping('LocList', 1, 2, line('.'), line('.') + v:count1 - 1)<Bar>echoerr ingo#err#Get()<Bar>endif<CR>
xnoremap <buffer> <silent> <Plug>(QuickfixCopyToLocListSelection) :<C-u>if ! <SID>Mapping('LocList', 1, 2, line("'<"), line("'>"))<Bar>echoerr ingo#err#Get()<Bar>endif<CR>
if ! hasmapto('<Plug>(QuickfixCopyToQuickfixLines)', 'n')
nmap <LocalLeader>qc <Plug>(QuickfixCopyToQuickfixLines)
endif
if ! hasmapto('<Plug>(QuickfixCopyToQuickfixSelection)', 'v')
xmap <LocalLeader>qc <Plug>(QuickfixCopyToQuickfixSelection)
endif
if ! hasmapto('<Plug>(QuickfixCopyToLocListLines)', 'n')
nmap <LocalLeader>ql <Plug>(QuickfixCopyToLocListLines)
endif
if ! hasmapto('<Plug>(QuickfixCopyToLocListSelection)', 'v')
xmap <LocalLeader>ql <Plug>(QuickfixCopyToLocListSelection)
endif