Mover linha da janela do quickfix para uma janela separada do quickfix

Mover linha da janela do quickfix para uma janela separada do quickfix

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-pluginisso 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-listem 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>qle 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

informação relacionada