จาก:h E65
นั้นเราจะเห็นว่า Vim ไม่อนุญาตให้มีกลุ่มการดักจับมากกว่า 9 กลุ่มในคำสั่งการแทนที่
ตัวอย่างเช่นคำสั่งต่อไปนี้จะทำงาน:
s/\v(a)(b)(c)(d)(e)(f)(g)(h)(i)/\9\8\7\6\5\4\3\2\1
แต่อันนี้ที่มีกลุ่มการดักจับมากกว่าหนึ่งกลุ่มจะล้มเหลว:
s/\v(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)/\10\9\8\7\6\5\4\3\2\1
คำถามของฉันไม่เกี่ยวกับสาเหตุที่มันล้มเหลว (มันเป็นขีด จำกัด ของ Vim) แต่ทำไม Vim ถึงมีขีด จำกัด นี้อยู่ด้วย?
นอกจากนี้ฉันทราบว่า regex ชีวิตจริงที่มีกลุ่มดักจับมากกว่า 9 กลุ่มน่าจะเป็นเรื่องที่น่าประหลาดใจที่จะอ่านและดูแล แต่ฉันก็ยังสงสัยอยู่
2
อาจไม่เกี่ยวข้องกับ Vim เท่านั้น: stackoverflow.com/a/10993346/2558252
—
nobe4
@ nobe4: น่าสนใจ! ดังนั้นบางทีคนสร้างเครื่องมือเหล่านี้คิดว่ามากกว่า 9 กลุ่มมีความไร้ประโยชน์ ...
—
statox
ฉันคิดว่าข้อ จำกัด นี้มาจาก vi ซึ่งรับการ จำกัด จาก ed / sed หลายปีที่ผ่านมาฉันได้ทำการปะเพื่อรองรับได้ถึง 99 กลุ่ม แต่ก็ไม่รวม
—
Christian Brabandt
@ChristianBrabandt การเพิ่มที่มีประโยชน์มากกว่านี้คือการใช้แฟล็กตัวเลขใน
—
Sato Katsura
sed
: s/.../.../3
จะแทนที่เฉพาะการเกิดขึ้นครั้งที่ 3 ของรูปแบบ นี่อาจเป็นฟีเจอร์ที่ฉันคิดถึงมากที่สุดในกลุ่ม
การสนับสนุนการบันทึกชื่อจะเป็นอีกวิธีหนึ่งในการบรรเทาปัญหานี้ เป็นที่กล่าวว่ามากที่สุดเท่าที่ผมเคยเห็นที่ใดก็ได้ที่อยู่ใกล้กับ 9 กลุ่มจับได้เมื่อคนไม่ได้รู้ว่าพวกเขาสามารถใช้กลุ่มที่ไม่ใช่การจับ
—
jamessan
\%()
-