วิธีทำ vim search ค้นหาผกผันสำหรับบรรทัดทั้งหมดโดยไม่มีข้อความ


18

ด้วย grep ฉันสามารถทำ grep -v "การค้นหาของฉัน" เพื่อรับบรรทัดทั้งหมดโดยไม่ต้อง "การค้นหาของฉัน"

ด้วย sed ฉันสามารถ sed '/ baz /! s / foo / bar / g' เพื่อค้นหาแทนที่ข้อความในบรรทัดที่ไม่มี baz

มีวิธีการทำสิ่งเดียวกันเป็นกลุ่ม และเป็นไปได้ แต่ไม่มีไวยากรณ์ "s ///" ใช้เพียงไวยากรณ์การค้นหา "/"

คำตอบ:


29
:g/pattern/

ตรงกับทุกบรรทัดที่พบรูปแบบ

:v/pattern/

ไม่ตรงข้าม ดู:h globalรายละเอียดเพิ่มเติมได้ที่

คุณสามารถใช้สิ่งนี้:

:v/pattern/norm Ipattern not found - <CR>

เพื่อเพิ่ม "รูปแบบที่ไม่พบ -" ให้กับทุกบรรทัดที่ไม่มี "รูปแบบ" หรือ

:v/pattern/s/nrettap/pattern

เพื่อแทนที่ "nrettap" ด้วย "pattern" ในทุกบรรทัดที่ไม่มี "pattern"

ตัวอย่างที่คาดหวังใช่


ฉัน lol'd ที่ "nrettap"
UncleZeiv

6

ในการค้นหาบรรทัดที่ไม่มี foo ตัวอย่างเช่น do:

/^\(\(.*foo.*\)\@!.\)*$

แหล่งที่มา: http://vim.wikia.com/wiki/Search_for_lines_not_containing_pattern_and_other_helpful_searches


1
ฉันไม่รู้เกี่ยวกับ \ @ directive ที่ให้คุณอ้างอิง atom ก่อนหน้าในการค้นหา มีประโยชน์มาก.
nelaaro

แม้ว่าจะถูกต้อง แต่ก็มีราคาแพง
เบอนัวต์

1

การใช้คำสั่ง: v commandEdit วิธีดั้งเดิมในการค้นหาบรรทัดที่ไม่ตรงกับรูปแบบคือการใช้คำสั่ง : v

:v/Warning/p

เคล็ดลับเรียบร้อยเมื่อทำงานกับไฟล์บันทึกขนาดใหญ่ที่คุณต้องการกรองบรรทัดที่ไม่เกี่ยวข้องมากที่สุดเท่าที่จะทำได้ก่อนที่คุณจะเริ่มการค้นหาจริงคือบันทึกไฟล์ภายใต้ชื่อชั่วคราวและลบบรรทัดที่ไม่ตรงกันทั้งหมดออก:

:sav junk.log
:v/warning/d

ขณะนี้คุณกำลังแก้ไขโคลนของไฟล์ต้นฉบับโดยลบทุกบรรทัดที่ไม่ตรงกับ "คำเตือน" ออกและคุณสามารถแก้ไขได้ตามต้องการ

Ref: https://vim.fandom.com/wiki/Search_for_lines_not_containing_pattern_and_other_helpful_searches

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