Vim에서 위치 목록과 Quickfix 목록의 차이점은 무엇입니까?


94

다음은 빠른 수정 목록 및 위치 목록에 대한 문서에서 가져온 것입니다. 그러나 실제로 무엇이 다른지 잘 모르겠습니다. 아래 이미지는 위치 목록 및 빠른 수정 목록에서 동일한 항목을 보여줍니다. vimgrep 및 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.

...

여기에 이미지 설명 입력

최신 정보

여기 에서 다음 찾았습니다 .

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.

따라서 차이점은 빠른 수정 목록의 모든 창과 위치 목록의 로컬 창입니다. 그러나 다른 창에서 위치 목록을 열 수 있습니다. 그렇다면 차이점은 무엇입니까 ??

답변:


110

위치 목록은 현재 창에 로컬이므로 창 수만큼 위치 목록을 가질 수 있습니다. 창 30 개? 얼마든지 요. 30 개의 동시 위치 목록이 있습니다.

빠른 수정 목록은 전역이므로 한 번에 둘 이상을 사용할 수 없습니다. 현재 빠른 수정 목록을 이전 목록으로 바꿀 수있는 명령이 있지만 두 개의 동시 빠른 수정 목록을 가질 수 없습니다.

위치 / 빠른 수정 "목록"(데이터 구조)을 위치 / 빠른 수정 "창"(해당 데이터 구조의 내용을 표시하는 창)과 혼동하지 마십시오. "창"의 동작은 비슷하지만 "목록"은 그렇지 않습니다. 그 차이는 중요합니다. 고맙게도 해당 목록과 상호 작용하는 유일한 방법은 이러한 창뿐이 아니기 때문입니다 . 관련 창 열지 않고도 목록을 이동할 수있는 많은 명령이 있으며 이러한 목록 간의 차이점을 아는 것이 이러한 명령을 효율적으로 사용하는 데 중요합니다. .

실습 예시 :

$ vim -O foo.txt bar.txt

  1. 수행 :lvim foo %foo.txt포함 된 윈도우의 위치 목록을 만들 수 foo.txt.

  2. 수행 :lne몇 가지에 점프에 몇 번 foo에서 foo.txt.

  3. 집중 bar.txt하고 수행하십시오 :lne. 무슨 일이야?

  4. 이제 수행 :lvim bar %bar.txt포함 된 윈도우의 위치 목록을 만들 수 bar.txt.

  5. 수행 :lne몇 번. 어떤 경기로 점프합니까? 어떤 버퍼에 있습니까? 어느 창에서?

  6. 다른 창으로 전환 :lne하고 몇 번 수행하십시오. 무슨 일이야?

  7. 로 다시 전환하십시오 bar.txt. 무엇을 :lne합니까?

  8. 이제 수행 :vim bar %bar.txtquickfix 목록을 만들 수 있습니다.

  9. 수행 :cn몇 가지에 점프에 몇 번 bar에서 bar.txt.

  10. 이제 초점 foo.txt어떻게 않습니다 :cn합니까?

이동하는 위치 :lne는 현재있는 창에 따라 다르지만 이동하는 오류 :cn는 항상 동일합니다 (현재 빠른 수정 목록을 다른 목록으로 바꿀 때까지).

두 목록 모두 상대적으로 명확한 역할 IMO를 가지고 있습니다. 빠른 수정 목록 (따라서 빠른 수정 창)은 일반적으로 논리적으로 오류에 전념하고 위치 목록은 검색에 적합합니다.


10
보다 일반적으로 : 빠른 수정 목록은 검색 또는 컴파일에 여러 파일이 포함 된 경우 가장 좋고 위치 목록은 단일 파일 만 포함 된 경우 가장 좋습니다.
Trebor Rude

5
특히를 사용하여 vim을 시작하면 (예 :) -q errors.txt에 컴파일 오류를 넣은 후 vim이 컴파일 오류 목록에서 빠른 수정 목록을 채우므로 매우 편리합니다. errors.txtgcc -Wall *.c >errors.txt 2>&1
Kevin

@TreborRude, 그렇게 생각하지 않습니다. 예를 들어, (위의 답변에서와 같이) 두 개의 수직 분할 창을 가정 해 봅시다 및 여러 파일 (검색하려면 foo1.txt, foo2.txt를 들어, ...) foo왼쪽 창을 여러 파일 (에 bar1.txt, bar2.txt에, ...) bar오른쪽 창이다. :lv foo foo*왼쪽 창에서 실행 한 다음 :lv bar bar*오른쪽 창에서 실행할 수 있습니다 . 그런 다음 왼쪽 창에에 :lne대한 다음 일치 항목이 표시 foo되지 않습니다 bar. 이는 :lv실행중인 창의 위치 목록을 사용하므로 각 검색마다 고유 한 위치 목록 이 있기 때문 입니다.
ma11hew28
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.