อะไรคือความแตกต่างระหว่างรายการสถานที่ตั้งและรายการแก้ไขด่วนในกลุ่ม


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.

ดังนั้นความแตกต่างคือหน้าต่างทั้งหมดสำหรับรายการแก้ไขด่วนและหน้าต่างภายในสำหรับรายการตำแหน่ง อย่างไรก็ตามฉันสามารถเปิดรายการตำแหน่งจากหน้าต่างอื่นได้ แล้วความแตกต่างคืออะไร ??

คำตอบ:


111

รายการตำแหน่งที่ตั้งอยู่ในหน้าต่างปัจจุบันดังนั้นคุณจึงสามารถมีรายการตำแหน่งได้มากเท่าหน้าต่าง: 30 หน้าต่าง? โอเคนี่คือรายการสถานที่ตั้งพร้อมกัน 30 รายการ

รายการแก้ไขด่วนเป็นแบบสากลดังนั้นคุณจึงไม่สามารถมีได้มากกว่าหนึ่งรายการพร้อมกัน มีคำสั่งที่อนุญาตให้คุณแทนที่รายการแก้ไขด่วนปัจจุบันด้วยคำสั่งก่อนหน้า แต่คุณไม่สามารถมีรายการแก้ไขด่วนพร้อมกันสองรายการได้

อย่าสับสนตำแหน่ง / Quickfix "รายการ" (โครงสร้างข้อมูล) กับ "windows" ตำแหน่ง / quickfix (หน้าต่างที่แสดงเนื้อหาของโครงสร้างข้อมูลเหล่านั้น) "หน้าต่าง" มีลักษณะการทำงานคล้ายกัน แต่ "รายการ" ไม่ทำ ความแตกต่างมีความสำคัญเนื่องจากหน้าต่างเหล่านี้ไม่ใช่วิธีเดียวในการโต้ตอบกับรายการเหล่านั้น: มีคำสั่งมากมายที่อนุญาตให้เราย้ายไปตามรายการเหล่านั้นโดยไม่ต้องเปิดหน้าต่างที่เกี่ยวข้องและการทราบความแตกต่างระหว่างรายการเหล่านั้นเป็นกุญแจสำคัญในการใช้คำสั่งเหล่านั้นอย่างมีประสิทธิภาพ .

ตัวอย่างภาพประกอบ Hands-on:

$ vim -O foo.txt bar.txt

  1. ทำ:lvim foo %ในการสร้างรายการสถานที่สำหรับหน้าต่างที่มีfoo.txtfoo.txt

  2. ทำ:lneไม่กี่ครั้งที่จะข้ามไปไม่กี่ในfoofoo.txt

  3. มุ่งเน้นในการทำbar.txt :lneเกิดอะไรขึ้น?

  4. ตอนนี้ทำ:lvim bar %ในการสร้างรายการสถานที่สำหรับหน้าต่างที่มีbar.txtbar.txt

  5. ทำ:lneสองสามครั้ง คุณข้ามไปที่การแข่งขันใด ในบัฟเฟอร์ใด ในหน้าต่างใด

  6. สลับไปที่หน้าต่างอื่นแล้วทำ:lneสองสามครั้ง เกิดอะไรขึ้น?

  7. bar.txtสวิทช์อีกครั้งเพื่อ อะไร:lneทำอย่างไร

  8. ตอนนี้ทำ:vim bar %ในbar.txtการสร้างรายการ QuickFIX

  9. ทำ:cnไม่กี่ครั้งที่จะข้ามไปไม่กี่ในbarbar.txt

  10. ตอนนี้มุ่งเน้นไปที่foo.txtสิ่งที่:cnทำ?

ตำแหน่งที่คุณข้ามไปด้วย:lneขึ้นอยู่กับหน้าต่างที่คุณอยู่ แต่ข้อผิดพลาดที่คุณข้ามไปด้วย:cnจะเหมือนกันเสมอ (จนกว่าคุณจะแทนที่รายการแก้ไขด่วนปัจจุบันด้วยรายการอื่น)

ทั้งสองรายการมีบทบาทที่ค่อนข้างชัดเจน IMO: รายการ Quickfix (และหน้าต่าง Quickfix) มักจะอุทิศให้กับข้อผิดพลาดอย่างมีเหตุผลและรายการตำแหน่งดูเหมือนว่า (สำหรับฉัน) เหมาะสำหรับการค้นหา


10
โดยทั่วไป: รายการ Quickfix จะดีที่สุดเมื่อการค้นหาหรือคอมไพล์ของคุณเกี่ยวข้องกับไฟล์หลายไฟล์รายการตำแหน่งจะดีที่สุดเมื่อมีไฟล์เดียวเท่านั้นที่เกี่ยวข้อง
Trebor Rude

5
โดยเฉพาะอย่างยิ่งถ้าคุณเปิด vim ด้วย-q errors.txtหลังจากใส่ข้อผิดพลาดในการคอมไพล์ในerrors.txt(เช่นgcc -Wall *.c >errors.txt 2>&1) vim จะเติมรายการ Quickfix จากรายการข้อผิดพลาดในการคอมไพล์ซึ่งมีประโยชน์มาก
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.