Dari :h E65
kita dapat melihat bahwa Vim tidak mengizinkan lebih dari 9 kelompok tangkapan dalam perintah substitusi.
Sebagai contoh, perintah berikut akan berfungsi:
s/\v(a)(b)(c)(d)(e)(f)(g)(h)(i)/\9\8\7\6\5\4\3\2\1
Tetapi yang satu ini dengan satu lagi grup penangkap akan gagal:
s/\v(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)/\10\9\8\7\6\5\4\3\2\1
Pertanyaan saya bukan tentang mengapa gagal (itu adalah batas keras Vim) tetapi tentang mengapa Vim memiliki batas ini sama sekali?
Juga, saya sadar bahwa regex kehidupan nyata dengan lebih dari 9 grup tangkap mungkin akan sangat mengerikan untuk dibaca dan dipelihara tetapi saya masih penasaran.
regular-expression
statox
sumber
sumber
sed
:s/.../.../3
akan mengganti hanya kejadian ke-3 dari pola. Ini mungkin fitur yang paling saya lewatkan di Vim.\%()
.Jawaban:
Alasan yang jelas adalah bahwa kelompok dengan dua digit atau lebih bersifat mendua: harus
\12
diambil sebagai kelompok 12, atau sebagai kelompok 1 diikuti oleh string2
?Ada alasan lain yang terkait dengan efisiensi (waktu pencocokan eksponensial dan sejenisnya). Ini adalah show stopper ketika
ed
ditulis. Algoritma yang lebih baik telah ditemukan sejak itu.sumber
\11
referensi untuk menangkap jika ada setidaknya 11 dari mereka, yang tidak konsisten tetapi biasanya baik-baik saja; dan hal-hal seperti\g{11}
untuk referensi dan${11}
penggantian), tetapi vim tidak pernah memperkenalkan semua itu.