มีรูปแบบ ^ เป็นกลุ่มหรือไม่?


20

ในโหมดปกติ, 0คำสั่งจะนำคุณไปยังคอลัมน์แรกของบรรทัดและ^นำคุณไปยังจุดเริ่มต้นของบรรทัดตรรกะ (เช่นอักขระที่ไม่ใช่ช่องว่างตัวแรก) ในโลก regex ^จับคู่อักขระตัวแรกในบรรทัดเว้นวรรคหรือไม่ Vim มีรูปแบบที่ทำงานเหมือนกับคำสั่ง '^' ซึ่งตรงกับจุดเริ่มต้นตรรกะของบรรทัดหรือไม่?


ฉันคิดว่า ^ ใน regex ตรงกับจุดเริ่มต้นของบรรทัดไม่ใช่ตัวอักษรตัวแรก ^ จะจับคู่การเริ่มต้นและตัวอักษรตัวแรกไม่ใช่ตัวอักษรเริ่มต้นและตัวที่สอง
bdsl

คำตอบ:


17

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

^\s*restofpattern

หากคุณไม่ต้องการรวมช่องว่างในการแข่งขันของคุณคุณต้องใช้การยืนยันความกว้างเป็นศูนย์เช่น:

\(^\s*\)\@<=restofpattern

ไม่สวยอย่างแน่นอน แต่อย่างน้อยก็ทำให้งานเสร็จ


6

หากต้องการจับคู่อักขระที่ไม่ใช่สีขาวตัวแรกคุณเพียงแค่ใช้\Sตามปกติ


หากคุณใช้^ใน regex เป็นกลุ่มมันจะจับคู่การเริ่มต้นที่แท้จริงของบรรทัดแม้ว่าจะมีช่องว่าง

ตัวอย่างเช่นบรรทัดนี้เริ่มต้นด้วยช่องว่าง:

 <- there's a space there you can't see :)

คำสั่ง vim นี้จะลบพื้นที่นำหน้า:

:%s/^ //

ส่งผลให้ต่อไปนี้:

<- there's a space there you can't see :)

ดังนั้น regex จะทำงานตามที่คุณคาดหวังแม้ว่าคำสั่งจะไม่


ฉันคิดว่าคุณจะอธิบาย downvote คำตอบนี้เท่าที่ฉันรู้ถูกต้อง
Michael Hampton

1
ฉันไม่ได้ลงคะแนน แต่เป็นการชี้แจง: ฉันสงสัยว่า Vim มีตัวดำเนินการเพื่อจับคู่อักขระที่ไม่ใช่ช่องว่างตัวแรกของบรรทัด ตัว^ดำเนินการ (เช่นการใช้งาน regex ทั้งหมด) จะจับคู่อักขระตัวแรกแม้ว่าจะเป็นช่องว่าง
ไมเคิล

คุณคาดหวังว่าจะทำตามปกติได้อย่างไร โดยปกติใน regex คุณจะใช้สิ่งที่ต้องการ\Sจับคู่อักขระที่ไม่ใช่ช่องว่างตัวแรก
Michael Hampton

2
\Sจะตรงกับใด ๆของตัวละครที่ไม่ใช่ช่องว่าง ฉันคิดว่า Vim จะมีชวเลขที่มีความกว้างเป็นศูนย์สำหรับเรื่องนี้: ^\W*\S.
ไมเคิล

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