ฉันจะค้นหาสตริงระหว่างหมายเลขบรรทัดที่แน่นอนได้อย่างไร


15

นี่เป็นปัญหาที่ฉันเพิ่งพบเมื่อไม่นานมานี้ ฉันมีไฟล์ที่มีข้อความหลายร้อยบรรทัด ฉันจะค้นหาสตริงระหว่างหมายเลขบรรทัดสองหมายเลขได้อย่างไร เช่นฉันต้องการค้นหาระหว่างหมายเลขบรรทัด 100 และ 325

คำตอบ:


7
:100,235g/foo/#<CR>

จากนั้นกด:147<CR>เพื่อข้ามไปยังบรรทัดที่ต้องการ

คุณยังสามารถใช้:ilist:

:100,235il foo<CR>

ดู:help range, และ:help :global:help :ilist


5

มีวิธีการค้นหาระหว่างบรรทัดเฉพาะ

/%>{linenumber}l\%<{linenumber}{pattern}

ตัวอย่าง:

/%>199l\%<300lgood

สิ่งนี้จะค้นหาจากบรรทัด 200 ถึง 299 สำหรับรูปแบบ 'ดี'

%>199l - l is for line, >199 denotes the lines greater than 199

2
100GV325G<esc>
/\v%Vpattern
  • 100GV325G<esc>มองเห็นเส้นที่เลือกได้ตั้งแต่ 100 ถึง 325 กลับไปที่normalโหมด
  • /\v%Vpatternใช้:h /\%Vเพื่อ จำกัด ช่วงการค้นหาไปยังพื้นที่ภาพล่าสุด

หากรูปแบบของคุณมีการขึ้นบรรทัดใหม่คุณต้องเพิ่มอีกอัน\%Vเพื่อ จำกัด การสิ้นสุดของรูปแบบในพื้นที่ภาพ:

100GV325G<esc>
/\v%Vpattern%V
  • :h /\%V

1

บางครั้งคุณต้องค้นหาสัญลักษณ์ที่กำหนดภายในฟังก์ชัน / วิธี

  void f(bool b)
  {
    b;
    b;
  }

  void g(bool b)
  {
    b;  
    b;  
    b;  
    b;  
  }

เพื่อที่จะค้นหาbในf()เท่านั้น:

  • ไปที่{ของf()
  • เข้าสู่โหมดภาพด้วย V
  • จบf()ด้วย '%'
  • ไปที่ exec บรรทัดด้วยคำสั่ง ':'
  • เมื่อคุณอยู่ในอินพุตบรรทัดคำสั่งil bเพื่อรับ :'<,'>il b

หลังจาก<CR>(Enter) คุณจะได้รับ

b.cpp
  1:   15     b;
  2:   16     b;
Press ENTER or type command to continue

ยินดีต้อนรับสู่Vi และ Vim ! สิ่งนี้แตกต่างอย่างมากจากคำตอบของ romainl อย่างไร
D. Ben Knoble

ขอบคุณ! ประการแรกฉันเชื่อว่าผู้ที่เพิ่งเริ่มเป็นกลุ่มและไม่คุ้นเคย%และโหมดภาพสามารถพบว่ามีประโยชน์ ประการที่สองไม่จำเป็นต้องใส่ช่วงของเส้นอย่างชัดเจน
dmytro.poliarush

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