ค้นหาบรรทัดที่มีรูปแบบ แต่ไม่มีรูปแบบที่สอง


15

ฉันต้องการค้นหาบรรทัดที่มีคำบางคำ แต่ไม่มีคำที่สอง

ตัวอย่างเช่นค้นหาบรรทัดที่มีคำว่า "นี่" แต่ไม่ใช่คำว่า "สีแดง"

ดังนั้นสำหรับไฟล์ที่มีบรรทัดเหล่านี้

This is a blue coat
This is a red  coat
This is a purple coat
That is a coat

การค้นหาจะค้นหาบรรทัดแรกและบรรทัดที่สามเท่านั้น

ขอบคุณสำหรับคำแนะนำใด ๆ !


คุณสามารถใช้ปลั๊กอิน LogiPat ที่แจกจ่ายกับ Vims รุ่นใหม่
Christian Brabandt

คำตอบ:


23

คุณสามารถใช้คำสั่งนี้เพื่อพิมพ์บรรทัดที่มีThisและไม่red:

:g/\(.*This\)\&\(.*red\)\@!
  • \&แยกกิ่งก้านออกเหมือนลอจิคัลANDเพราะเราต้องการเส้นที่ตรงกับสองเงื่อนไข (กิ่ง)
  • \(.*This\)เป็นสาขาแรกมันอาจเป็นเพียงThisแต่มันเป็นเรื่องธรรมดามากกว่านั้น
  • \(.*red\)\@!เป็นสาขาที่สอง\@!หมายถึง "การจับคู่ความกว้างศูนย์ถ้าอะตอมก่อนหน้านี้ไม่ตรงกับ" NOTเหมือนตรรกะ

ในคำอื่น ๆ :

\(.*This\)  \&  \(.*red\)\@!
°°°°°°°°°°  °°  °°°°°°°°°°°°
'This'      AND NOT 'red'

ขอบคุณมากนี่เป็นข้อความค้นหาที่ผ่านการจัดรูปแบบ ฉันสามารถใช้ฟังก์ชันนี้เพื่อค้นหาฟังก์ชั่นที่ขาดเอกสารได้
Joshua Detwiler

1

ลองดูที่โพสต์นี้

รวมกับคำตอบ @romainl และคุณสามารถทำสิ่งที่คุณต้องการ

ตัวอย่าง: สมมติว่าฉันต้องการเพิ่มconstฟังก์ชันที่ไม่มี

    handleChange = value => {

สคริปต์ VIM:

%s/\([ ]*\)\(\w* = .*$\)\&^\(\&\(.*const.*\)\@!.\)*$/\1const \2/gc

เอาท์พุท:

    const handleChange = value => {

คำอธิบาย:

\([ ]*\)\(\w* = .*$\)

- รับทุกบรรทัดที่มี word =

\&

- รวมกฎ

^\(\&\(.*const.*\)\@!.\)*$

- constสายไม่ควรมี

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