Vim regex'te '\%' ve '\ @' belirtecinin adı nedir? Ve ne yapar?


10

Sözdizimi dosyasını düzenlerken, şöyle bir şey buldum:

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

Ben daha başka aşina olduğum \%ve \@orada. Googling bile yapamıyorum çünkü adının ne olduğunu bilmiyorum. Öyleyse nedir ve ne işe yarar?

Yanıtlar:


14

Google'a gitmeden önce dokümanı deneyin:

itibaren :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}

Ve :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 "//"

1
Ah, bunun :helppaterni argüman olarak kabul edebileceğini bilmiyorum . Bu çok değerli bir bilgi. Bu arada, bir adı yok değil mi?
Mas Bagol

1
Tam Bağımsız değişken olarak kalıplarını kabul etmiyor: pattern.txtdosyası bu öğeler hakkında konular böylece bir yardım etiketi ilişkili (var sahiptir /\%(\)ya /\%(ya E53ilki ve /\@<!ikincisi için) ve bu etiketleri argümanları olarak kullanılabilir :h. Şimdi isimleriyle ilgili olarak, ^ya da gibi atomlar olarak adlandırıldıklarını söyleyebilirim ., ama% 100 emin değilim.
statox

4
@statox Deseni tam olarak argüman olarak kabul etmiyor - Peki, bunun :helpgrepiçin var. :)
lcd047

@ lcd047 Lanet olsun bu komutu nasıl unutmuş olabilirim ?! Bu yararlı hatırlatma için teşekkürler :)
statox

1
Bu site bazen beni şaşırtmaya eğilimlidir: Şu anda 170 cevap verdim ve bu en çok 6. seçildi, sadece dokümanı bulmak için sadece iki kolay alıntı içerirken vimscript kodu veya daha karmaşık eylemleri nasıl gerçekleştireceğim. .. Neden bu kadar "başarılı" olduğunu
anlamıyorum
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.