ฉันต้องการค้นหาสตริงและค้นหาจำนวนครั้งที่เกิดขึ้นในไฟล์โดยใช้ตัวแก้ไข vi
ฉันต้องการค้นหาสตริงและค้นหาจำนวนครั้งที่เกิดขึ้นในไฟล์โดยใช้ตัวแก้ไข vi
คำตอบ:
:g/xxxx/d
การดำเนินการนี้จะลบบรรทัดทั้งหมดที่มีรูปแบบและรายงานจำนวนที่ถูกลบ เลิกทำเพื่อดึงกลับมา
วิธีคือ
:% s / pattern // gn
คุณต้องการn
ธง ในการนับคำใช้:
:%s/\i\+/&/gn
และคำเฉพาะ:
:%s/the/&/gn
ดูcount-items
ส่วนเอกสาร
หากคุณเพียงพิมพ์:
%s/pattern/pattern/g
จากนั้นบรรทัดสถานะจะให้จำนวนการแข่งขันใน vi เช่นกัน
(คล้ายกับที่ Gustavo กล่าว แต่นอกจากนี้ :)
สำหรับการค้นหาก่อนหน้านี้คุณสามารถทำได้ง่ายๆ:
:%s///gn
ไม่จำเป็นต้องใช้รูปแบบเนื่องจากมีอยู่แล้วในการลงทะเบียนการค้นหา ( @/
)
"%" - ทำs/
ในทั้งไฟล์
"g" - ค้นหาทั่วโลก (พร้อมด้วย Hit หลายรายการในบรรทัดเดียว)
"n" - ป้องกันการแทนที่s/
- ไม่มีการลบ! ไม่มีอะไรต้องยกเลิก!
(ดู: :help s_flag
สำหรับข้อมูลเพิ่มเติม)
(วิธีนี้ทำงานได้อย่างสมบูรณ์แบบกับ " ค้นหาข้อความที่เลือกด้วยภาพ " ตามที่อธิบายไว้ในvim-wikia tip171 )
ใช้
:% s / รูปแบบ / \ 0 / g
เมื่อสตริงรูปแบบยาวเกินไปและคุณไม่ต้องการพิมพ์ใหม่ทั้งหมด
คำตอบสั้น ๆ :
:% s / string-to-be-search // gn
เพื่อการเรียนรู้ :
มี 3 โหมดในตัวแก้ไข VI ดังต่อไปนี้
:
คุณกำลังเข้าจากCommand
ไปCommand-line
โหมด ตอนนี้สิ่งที่คุณเขียนหลังจากนั้น:
อยู่บน CLI (Command Line Interface)%s
ระบุทุกบรรทัด การระบุช่วงเป็น%
วิธีการแทนที่ในไฟล์ทั้งหมด ไวยากรณ์สำหรับการแทนที่เหตุการณ์ทั้งหมดคือ:%s/old-text/new-text/g
g
ระบุเหตุการณ์ทั้งหมดในบรรทัด ด้วยg
แฟล็กคุณสามารถทำให้ทั้งเส้นถูกแทนที่ได้ หากg
ไม่ได้ใช้แฟล็กนี้จะมีการแทนที่เฉพาะครั้งแรกในบรรทัดเท่านั้นn
ระบุจำนวนเอาต์พุตที่เกิดขึ้น //
replacement text
เฉือนคู่แสดงให้เห็นถึงการละเลย เพราะเราแค่ต้องการค้นหาเมื่อได้จำนวนเหตุการณ์แล้วคุณสามารถกดN
คีย์เพื่อดูเหตุการณ์ทีละรายการ
สำหรับการค้นหาและการนับในช่วงเฉพาะของบรรทัดหมายเลข 1 ถึง 10:
: 1,10s / สวัสดี // gn
%
สำหรับไฟล์ทั้งหมดจะถูกเติมด้วย,
หมายเลขบรรทัดที่คั่นไว้ สำหรับการค้นหาและแทนที่ในช่วงเฉพาะของบรรทัดหมายเลข 1 ถึง 10:
: 1,10s / helo / hello / gn
ฉันขอแนะนำให้ทำ:
*
เพื่อทำการ "ค้นหาขอบเขต" สำหรับสิ่งที่อยู่ใต้เคอร์เซอร์หรือ/pattern
ทำการค้นหามาตรฐาน:%s///gn
เพื่อรับจำนวนครั้งที่เกิดขึ้น หรือคุณสามารถใช้:%s///n
เพื่อรับจำนวนบรรทัดที่เกิดขึ้น**จริงๆแล้วฉันสามารถหาปลั๊กอินที่จะส่งข้อความ "จับคู่ N ของ N 1บน N 2บรรทัด" ในทุกการค้นหา แต่อนิจจา
หมายเหตุ: อย่าสับสนกับคำที่ยุ่งยากของผลลัพธ์ อดีตคำสั่งอาจทำให้คุณบางอย่างเช่นที่หลังอาจทำให้คุณ4 matches on 3 lines
3 matches on 3 lines
แม้ว่าความถูกต้องในทางเทคนิคคำหลังนั้นทำให้เข้าใจผิดและควรพูดว่า 'จับคู่ 3 บรรทัด' อย่างที่คุณเห็นไม่มีความจำเป็นใด ๆ ที่จะต้องใช้แบบฟอร์มหลัง ('n' เท่านั้น) คุณจะได้รับข้อมูลเดียวกันชัดเจนยิ่งขึ้นและมากขึ้นโดยใช้แบบฟอร์ม "gn"
:g/xxxx/d
) นั้นแย่มากอันตรายและด้อยกว่าคำตอบอื่น ๆ ในหน้านี้ โปรดยกเลิกการเลือก