ในกลุ่มให้ค้นหาย้อนกลับสำหรับวงเล็บปีกกา / parens ที่ตรงกัน


10

อย่างที่คุณรู้ส่วนใหญ่คุณสามารถใช้%เพื่อค้นหาส่งต่อในบรรทัดเพื่อค้นหาวงเล็บปีกกา / วงเล็บ / paren คู่ต่อไปและย้ายไปยังคู่ที่ตรงกัน:

|a|rray[index] = value;
" |e| is the cursor; hit %:
array[index|]| = value;

ฉันหวังว่าจะมีคีย์ที่คล้ายกันซึ่งค้นหาย้อนหลังในบรรทัดเช่น:

array[index] = value|;|
" |;| is the cursor again, hit the key I'm looking for:
array|[|index] = value;

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


ควรสังเกตว่า%ไม่เพียง แต่ค้นหาวงเล็บเหลี่ยมที่จับคู่ในบรรทัดเดียวกัน แต่จะค้นหาไฟล์เพิ่มเติม ฉันชอบมันเป็นพิเศษสำหรับลูป ฯลฯ ในภาษาโปรแกรมที่เลือก
แบร์นฮาร์ด

1
@Bernhard ใช่ แต่เฉพาะเมื่อพบหนึ่งในวงเล็บบนบรรทัด
Kevin

หากคุณไม่ได้ต่อต้านสคริปต์ addon matchit addonจะให้g%คำสั่งที่คล้ายกับสิ่งที่คุณกำลังมองหา
jw013

โง่ แต่คำถามของคุณระบุว่าคุณต้องการทราบว่าทำไมถึงไม่มีหุ้นส่วน คุณหมายถึง "มีพันธมิตรบางส่วนที่ฉันไม่รู้หรือไม่" :)
rjewell

@ rjewell ตกลงฉันแยกมันแล้วดังนั้นจึงไม่มีเทคนิคถามอีกต่อไป
เควิน

คำตอบ:


4

หากคุณจริงๆต้องการค้นหาย้อนหลังสำหรับตัวอักษรที่ตรงกันทั่วไปคุณสามารถใช้หนึ่งของเหล่านี้vimคำสั่ง -specific:

  • [(... (ไปที่(อักขระที่ไม่ตรงกันก่อนหน้านี้)
  • [{... (ไปที่{อักขระที่ไม่ตรงกันก่อนหน้านี้)

คำสั่งสองคำสั่งเหล่านี้มีคู่ค้าส่งต่อที่ตรงกัน:

  • ])... (ไปที่)อักขระที่ไม่ตรงกันถัดไป)
  • ]}... (ไปที่}อักขระที่ไม่ตรงกันถัดไป)

มีคำสั่งที่คล้ายกันอื่น ๆ สำหรับ#ifdefและสำหรับความคิดเห็น C

ท่านสามารถหาข้อมูลเพิ่มเติมในเมื่อโดยใช้คำสั่งvim:help %


ฉันรู้ว่าของเหล่านี้เป็นปัญหาที่พวกเขาหาที่เปรียบคู่ผมต้องไปหาจับคู่คู่
เควิน

@ เควิน: ฉันเข้าใจผิดเอกสาร (ถอนหายใจ) แน่นอนว่าเมื่อคุณใช้%แล้วมันจะไปทั้งสองวิธี - การหาคู่ที่ตรงกัน นอกจากนี้หากอยู่ในบล็อกคำสั่งด้านบนจะค้นหาการจับคู่ที่เหมาะสม
เหม่ย

4

ค้นหาวงเล็บที่ตรงกัน ดังนั้นถ้าคุณอยู่ (หรือ {มันจะค้นหาไปข้างหน้า

หากคุณอยู่ใน} หรือ) มันจะค้นหาย้อนกลับ

% ไม่ใช่ทิศทางเพียงแค่ค้นหาวงเล็บที่ตรงกัน


หากฉันอยู่ด้านหลังของคู่หนึ่ง% จะพบว่าเป็นพันธมิตร หากฉันอยู่ท้ายบรรทัดจะไม่พบคู่ก่อนหน้าบนบรรทัด
เควิน

คำถามนี้ควรถูกเลือกใช่หรือไม่
แจ็ค

2

ฉันเพิ่งลอง:map ^] ^%%(ด้วย^]= Ctrl+ v Ctrl+ 5ที่นี่เพื่อเปรียบเทียบกับ%= Shift+ 5)

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


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

:map ^] ^[:call search("[({[]", "bes", line("."))^M

สำหรับ

  • ^]= Ctrl+ v Ctrl+5
  • ^[= Ctrl+v Esc
  • ^M= Ctrl+v Return

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

สิ่งนี้จะใช้ได้ภายในบล็อกใช่ไหม ถ้าเป็นเช่นนั้นจะทำงานได้เป็นอย่างดีและไม่จำเป็นต้องมี[( map
เหม่ย

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