Qual é a diferença entre lista de localização e lista de correção rápida no vim

94

O que se segue é da documentação sobre a lista de correções rápidas e a lista de locais. Mas não tenho certeza do que realmente é diferente. A imagem abaixo mostra as mesmas coisas da lista de locais e da lista de correção rápida. Quando devo usar um ou outro no vimgrep e lvimgrep.

In Vim the quickfix commands are used more generally to find a list of positions 
in files.For example, |:vimgrep| finds pattern matches.  You can use the positions 
in a script with the |getqflist()| function. Thus you can do a lot more than the
edit/compile/fix cycle!
...
...

                         *location-list* *E776* 
A location list is similar to a quickfix list and contains a list of positions 
in files.  A location list is associated with a window and each window can have 
a separate location list.  A location list can be associated with only one window.  
The location list is independent of the quickfix list.

...

insira a descrição da imagem aqui

ATUALIZAR

Eu encontrei o seguinte a partir daqui .

These commands all fill a list with the results of their search. "grep" and 
"vimgrep" fill the "quickfix list", which can be opened with :cw or :copen, 
and is a list shared between ALL windows. "lgrep" and "lvimgrep" fill the 
"location list," which is local to the current window, and can be opened 
with :lw or :lopen. Both of these lists can be used to instantly jump to 
the matching line in whatever file it occurs in.

Portanto, a diferença são todas as janelas para lista de correção rápida e janela local para lista de locais. No entanto, posso abrir a lista de locais de qualquer outra janela. Então, qual é a diferença então ??

canela
fonte

Respostas:

110

A lista de locais é local para a janela atual, então você pode ter tantas listas de locais quanto janelas: 30 janelas? Não tem problema, aqui estão suas 30 listas de locais simultâneos.

A lista de correção rápida é global, então você não pode ter mais de uma disponível ao mesmo tempo. Existem comandos que permitem substituir a lista de correções rápidas atual por uma anterior, mas você não pode ter duas listas de correções rápidas simultâneas.

Não confunda as "listas" de localização / correção rápida (as estruturas de dados) com as "janelas" de localização / correção rápida (as janelas exibindo o conteúdo dessas estruturas de dados). As "janelas" têm comportamentos semelhantes, mas as "listas" não. A diferença é importante porque essas janelas, felizmente, não são as únicas maneiras de interagir com essas listas: há muitos comandos que nos permitem mover por essas listas sem abrir as janelas associadas e saber a diferença entre essas listas é a chave para usar esses comandos de forma eficiente .

Exemplo prático ilustrado:

$ vim -O foo.txt bar.txt

  1. Fazer :lvim foo %em foo.txtpara criar uma lista de locais para a janela que contém foo.txt.

  2. Faça :lnealgumas vezes para pular para alguns fooem foo.txt.

  3. Concentre-se bar.txte faça :lne. O que acontece?

  4. Agora, :lvim bar %em bar.txtpara criar uma lista de locais para a janela que contém bar.txt.

  5. Faça :lnealgumas vezes. Para quais partidas você salta? Em qual buffer? Em qual janela?

  6. Mude para a outra janela e faça isso :lnealgumas vezes. O que acontece?

  7. Mude novamente para bar.txt. O que :lnefazer?

  8. Agora, :vim bar %em bar.txtpara criar uma lista quickfix.

  9. Faça :cnalgumas vezes para pular para alguns barem bar.txt.

  10. Agora, concentre-se em foo.txt, o que :cnfazer?

O local para onde você salta :lnedepende da janela em que você está, mas o erro para onde você salta :cné sempre o mesmo (até que você substitua a lista de correções rápidas atual por outra).

Ambas as listas têm funções relativamente claras, IMO: a lista de correção rápida (e, portanto, a janela de correção rápida) é geralmente e logicamente dedicada a erros e a lista de locais parece (para mim) adequada para pesquisa.

romainl
fonte
10
De forma mais geral: a lista de correções rápidas é melhor quando sua pesquisa ou compilação envolve vários arquivos, a lista de locais é melhor quando apenas um único arquivo está envolvido.
Trebor Rude
5
Em particular, se você iniciar o vim com -q errors.txt, depois de colocar erros de compilação em errors.txt(ou seja gcc -Wall *.c >errors.txt 2>&1), o vim irá preencher a lista de correções rápidas da lista de erros de compilação, o que é muito útil.
Kevin
@TreborRude, acho que não. Por exemplo, digamos que você tem duas janelas verticalmente divididos (como mostrado na resposta acima) e deseja pesquisar vários arquivos ( foo1.txt, foo2.txt...) para foona janela esquerda e vários arquivos ( bar1.txt, bar2.txt...) para barna janela da direita. Você pode correr :lv foo foo*na janela esquerda e depois :lv bar bar*na janela direita. Então, na janela à esquerda, :lneserá exibida a próxima correspondência para foo, não bar. Isso ocorre porque :lvusa a lista de locais da janela em que você a executa, de modo que cada pesquisa tem sua própria lista de locais.
ma11hew28