Apa nama token '\%' dan '\ @' di vim regex? Dan apa fungsinya?

10

Saat mengedit file sintaks, saya menemukan sesuatu seperti:

\s*\%(\%(:\@<!\/\/.*\)\=\|\%(\/\*.*\*\/\s*\)*\)$

Aku akrab dengan apapun selain \%dan \@di sana. Saya bahkan tidak bisa googling karena saya tidak tahu apa namanya. Jadi apa itu dan apa fungsinya?

Mas Bagol
sumber

Jawaban:

14

Sebelum googling, coba dok:

Dari :h \%

\%(\)   A pattern enclosed by escaped parentheses.
    Just like \(\), but without counting it as a sub-expression.  This
    allows using more groups and it's a little bit faster.
    {not in Vi}

Dan :h \@<!

\@<!    Matches with zero width if the preceding atom does NOT match just
    before what follows.  Thus this matches if there is no position in the
    current or previous line where the atom matches such that it ends just
    before what follows.

    Like "(?<!pattern)" in Perl, but Vim allows non-fixed-width patterns.
    The match with the preceding atom is made to end just before the match
    with what follows, thus an atom that ends in ".*" will work.
    Warning: This can be slow (because many positions need to be checked
    for a match).  Use a limit if you can, see below.

    Example         matches ~

    \(foo\)\@<!bar      any "bar" that's not in "foobar"

    \(\/\/.*\)\@<!in    "in" which is not after "//"
statox
sumber
1
Ah, saya tidak tahu itu :helpbisa menerima pola sebagai argumen. Itu info yang sangat berharga. Ngomong-ngomong, itu tidak memiliki nama, bukan?
Mas Bagol
1
Ini tidak persis menerima pola sebagai argumen: pattern.txtberkas memiliki topik tentang barang-barang ini sehingga mereka memiliki tag bantuan terkait ( /\%(\)atau /\%(atau E53untuk yang pertama dan /\@<!untuk yang kedua) dan tag ini dapat digunakan sebagai argumen dari :h. Sekarang tentang nama mereka, saya akan mengatakan mereka disebut atom seperti ^atau ., tapi saya tidak 100% yakin.
statox
4
@statox Tidak persis menerima pola sebagai argumen - Ya, memang untuk itulah :helpgrep. :)
lcd047
@ lcd047 Sialan bagaimana saya bisa melupakan perintah ini ?! Terima kasih atas pengingat yang membantu ini :)
statox
1
Situs ini cenderung mengejutkan saya kadang-kadang: Saat ini saya membuat 170 jawaban dan yang ini adalah yang ke-6 paling banyak dipilih sementara itu hanya berisi dua kutipan yang mudah ditemukan dari dokumen sedangkan saya punya jawaban lain dengan kode vimscript atau bagaimana mewujudkan tindakan yang lebih kompleks. .. Saya tidak mengerti mengapa yang ini begitu "sukses"
statox