ซ่อนบรรทัดที่ตรงกันทั้งหมดใน Vim


88

เป็นไปได้ไหมที่จะแสดง / ซ่อนบรรทัดที่ตรงกันทั้งหมดใน vi หรือ Vim? ไม่ใช่ไฮไลต์ แต่แสดงเฉพาะบรรทัดเหล่านั้น

ERRORเช่นฉันมีข้อความที่มีคำว่าคำว่า ฉันจะทำให้แสดงเฉพาะบรรทัดที่มีERRORและจะแสดงเฉพาะบรรทัดที่ไม่มีได้ERRORอย่างไร

มีวิธีแก้ไขโดยไม่ต้องลบบรรทัดที่ตรงกันทั้งหมดแล้วเลิกทำหรือไม่?


คำตอบ:


110

คุณรู้เกี่ยวกับ:globalคำสั่งหรือไม่? สิ่งนี้ทำในสิ่งที่คุณต้องการหรือไม่?

:g/ERROR

และตรงกันข้าม:

:g!/Error

หรือเทียบเท่า:

:v/Error

19
แบบนี้ไม่ดีมาก เมื่อคุณเลื่อนไปที่ด้านล่างคำสั่งจะเสร็จสิ้นและทุกอย่างจะปรากฏขึ้นอีกครั้ง มันไม่ได้ซ่อนเนื้อหาเหล่านั้นจริงๆ
Kan Li

@KanLi กดg<เพื่อดูอีกครั้งหรือ@:ถ้าคุณไม่ได้เรียกใช้และคำสั่ง
D.Ben Knoble

54

อีกวิธีหนึ่งขึ้นอยู่กับกรณีการใช้งานของคุณจะใช้vimgrepและผลของมันในQuickFIX คุณสามารถทำสิ่งต่อไปนี้:

:vimgrep pattern %จะค้นหาไฟล์ปัจจุบันและนำคุณไปยังผลการค้นหาแรก ที่สำคัญยังทำให้ผลลัพธ์อยู่ใน "รายการแก้ไขด่วน"

:copenจากนั้นจะเปิดรายการแก้ไขด่วนในหน้าต่างแก้ไขด่วนแยกต่างหาก ดังนั้นคุณจะมีหน้าต่างแยกต่างหากโดยมีทุกบรรทัดจาก vimgrep สุดท้ายของคุณ ภายในหน้าต่าง Quickfix คุณสามารถกด Enter หรือดับเบิลคลิกที่บรรทัดเพื่อข้ามไปยังบรรทัดที่เกี่ยวข้องในไฟล์ต้นฉบับของคุณ

:colderจะช่วยให้คุณกลับไปที่รายการ Quickfix ที่เก่ากว่า (ผลลัพธ์ vimgrep ที่เก่ากว่า) และ:cnewerส่งต่อไปยังผลการค้นหาที่ใหม่กว่า

โปรดทราบว่ารายการ Quickfix ยังได้รับการอัปเดตเมื่อเรียกใช้:make(ซึ่งเป็นสาเหตุที่เรียกว่า Quickfix สำหรับแก้ไขข้อผิดพลาด) ด้วยเหตุนี้จึงมีการเปลี่ยนแปลงรายการแก้ไขด่วนที่เรียกว่า "รายการสถานที่ตั้ง" ที่จะใช้มันแทนคุณใช้:lvimgrepคำสั่งการใช้งานแล้ว L-นำหน้ามากกว่าคำสั่ง C-คำนำหน้า - :lopen, ,:lolder:lnewer

แน่นอนว่ามีอะไรอีกมากมายที่คุณสามารถทำได้ ดู:help quickfixข้อมูลเพิ่มเติม

ปล. คุณบอกว่าคุณไม่ต้องการแนวทางที่ลบบรรทัดแล้วเลิกทำ แต่เนื่องจากคุณทำเครื่องหมายเป็นคำตอบที่ฉันคิดว่าฉันจะชี้ให้เห็นวิธีที่รวดเร็วและสกปรกคือการทำg/ERROR จากนั้นคุณสามารถยกเลิกได้โดยใช้g!/ERROR/d uนอกจากนี้ FYI คุณสามารถทำได้:set hlsearchเพื่อเน้นรูปแบบที่ตรงกับ:gคำสั่ง


1
ขอขอบคุณสำหรับเคล็ดลับเกี่ยวกับ ": g! / ERROR / d" ดีกว่าคำตอบที่ยอมรับ
VinGarcia

คุณสามารถทำได้ไหมโดยเส้นไม่ตรงกับรูปแบบ
Jacktose

39

คุณสามารถใช้ได้

:g/ERROR/

เพื่อพิมพ์ทุกบรรทัดด้วย ERROR

นอกจากนี้ยังมีปลั๊กอิน Vim ที่ฉันเห็นหลายครั้ง แต่ไม่ได้ใช้: foldsearch: พับเส้นที่ไม่ตรงกับรูปแบบที่กำหนด


15
+1 สำหรับลิงก์ไปยังปลั๊กอิน Foldsearch มันไม่สร้างความรำคาญและมีประโยชน์
user55400

26

วิธีที่ดีที่สุดคือ ->

:vimgrep /something/g % | copen

ซึ่งจะเปิดรายการที่ตรงกันสำหรับคำหลักของคุณและจะแสดงเฉพาะบรรทัดที่ตรงกันในหน้าต่าง Quickfix

แทนที่% ด้วยพา ธ ไปยังไฟล์หากไม่พิจารณาไฟล์ปัจจุบัน


1
แทนที่% ด้วยเส้นทางไฟล์หากคุณไม่ได้พิจารณาไฟล์ปัจจุบัน
Shivendra

คุณสามารถทำได้ไหมโดยเส้นไม่ตรงกับรูปแบบ
Jacktose

2

ในกรณีที่คุณเกิดขึ้นfzfคุณสามารถใช้:

  • :Lines ในไฟล์ที่เปิดอยู่ทั้งหมด
  • :BLines ในบัฟเฟอร์เปิดเท่านั้น
  • :Rg [pattern] โดยใช้ ripgrep

1

:vimgrep /something/g % | copenใช้งานได้ยอดเยี่ยม นอกจากนี้ยัง:g/<pattern>/dสามารถใช้เพื่อลบเส้นที่มีรูปแบบ


นี่เป็นอีกคำตอบสำหรับคำถามนี้
Shivendra


0

คุณอาจหมายถึงคำสั่งใน vim น้อยกว่า & / pattern / ซึ่งแสดงบรรทัดที่มี / pattern / (เช่น grep)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.