เป็นกลุ่มค้นหารอบตัวแบ่งบรรทัด


12

เมื่อฉันแก้ไขเอกสาร LaTeX เป็นกลุ่มบ่อยครั้งที่ฉันต้องการค้นหาวลี เนื่องจากฉันมีการตั้งค่า LaTeX เพื่อตัดบรรทัดบางครั้งครึ่งหนึ่งของวลีจะเป็นหนึ่งบรรทัดในขณะที่อีกครึ่งหนึ่งอยู่ถัดไป ในกรณีเช่นนี้การค้นหาไม่พบสิ่งที่ฉันกำลังมองหา ตัวอย่างเช่น

blah blah blah hello
world blah blah blah

เมื่อค้นหาโดยใช้/hello worldฉันไม่พบสิ่งที่ฉันกำลังมองหา มีวิธีที่ง่ายและรวดเร็วในการปรับเปลี่ยนการค้นหานี้เพื่อให้ได้ตำแหน่งที่ต้องการหรือไม่? หรือวิธีที่ดีกว่าที่จะบอก vim ให้ตรงกับช่องว่างสีขาว (ช่องว่างแท็บบรรทัดใหม่) กับช่องว่างในสตริงการค้นหา

คำตอบ:


15

\_sหลังจากการค้นหามากขึ้นก็ดูเหมือนว่าวิธีที่ง่ายที่สุดที่จะทำนี้ด้วย ตัวอย่างเช่น:

/hello\_sworld

4
คุณอาจต้องการhello\_s\+worldถ้ามีช่องว่างระหว่างอักขระมากกว่าหนึ่งตัวแน่นอน
Wodin

5

ปัญหานี้ได้รับการแก้ไขที่http://vim.wikia.com/wiki/Search_across_multiple_lines รวมเป็นฟังก์ชั่นที่สามารถทำสิ่งที่ฉันต้องการ

function! SearchMultiLine(bang, ...)
  if a:0 > 0
    let sep = (a:bang) ? '\_W\+' : '\_s\+'
    let @/ = join(a:000, sep)
  endif
endfunction
command! -bang -nargs=* -complete=tag S call SearchMultiLine(<bang>0, <f-args>)|normal! /<C-R>/<CR>

จากนั้นคุณสามารถทำการค้นหาแบบหลายบรรทัดโดยใช้:S hello worldและจะทำการแปลงเป็นhello\s\+worldและค้นหา คุณสมบัติที่ดีอีกอย่างหนึ่งก็คือการเพิ่มการค้นหาใหม่นี้ในประวัติการค้นหา สิ่งนี้ช่วยให้คุณย้อนกลับไปและแก้ไขการค้นหาโดยใช้q/หากคุณต้องการ :%s//new thing/gนอกจากนี้ยังสามารถใช้ในการทำเปลี่ยนตัวกับ ข้อเสียของสิ่งนี้คือมันไม่ได้ใช้incsearchถ้าคุณเปิดใช้งาน


3

วิธีที่ฉันรู้ไม่ยาก แต่มันก็น่าเบื่อนิดหน่อย แทนที่ทุกช่องว่างในคำค้นหาของคุณด้วยสิ่งต่อไปนี้:

[ \t\n]\+

(สังเกตช่องว่างหลังเครื่องหมาย[.) นี่คือไวยากรณ์การจับคู่นิพจน์ปกติ ทำลายลงมันหมายถึง:

  • [...] หมายถึงจับคู่หนึ่งในรายชื่อตัวละครในวงเล็บ
  • \t คือแท็บ
  • \n คือ Newline
  • ...\+ หมายถึงการจับคู่อย่างน้อยหนึ่งข้อข้างต้น

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการแสดงออกปกติคุณสามารถถามเป็นกลุ่ม:

:help regexp
:help usr_27

1

ฉันเองจะใช้[ \t\n]*แทนช่องว่าง สิ่งนี้จะตรงกับศูนย์ 'หรือมากกว่า' 'แท็บและขึ้นบรรทัดใหม่ วิธีนี้ถ้าอินสแตนซ์ของรูปแบบการค้นหาของคุณมีตัวแบ่งบรรทัด

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