O que é o nome do token '\%' e '\ @' no vim regex? E o que ele faz?


10

Ao editar o arquivo de sintaxe, encontrei algo como:

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

Estou familiarizado com qualquer outro do que \%e \@lá. Não consigo nem pesquisar no Google porque não sei como é o nome. Então, o que é e o que faz?

Respostas:


14

Antes de pesquisar no Google, tente o documento:

A partir de :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}

E :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, eu não sei se isso :helppode aceitar padrão como argumento. Essa é uma informação muito valiosa. A propósito, ele não tem nome, não é?
Mas Bagol

1
Ele não aceita exatamente padrões como argumentos: o pattern.txtarquivo tem tópicos sobre esses itens, portanto, eles têm uma etiqueta de ajuda associado ( /\%(\)ou /\%(ou E53para o primeiro e /\@<!para o segundo) e essas tags podem ser usadas como argumentos de :h. Agora, sobre o nome deles, eu diria que eles são chamados átomos, exatamente como ^ou ., mas não tenho 100% de certeza.
statox

4
@statox Ele não aceita exatamente padrões como argumentos - Bem, :helpgrepé para isso. :)
lcd047 17/08/16

@ lcd047 Porra, como eu poderia ter esquecido esse comando ?! Obrigado por este lembrete útil :)
statox

1
Às vezes, esse site me surpreende: atualmente, eu fiz 170 respostas e esta é a 6a mais votada, enquanto contém apenas duas citações fáceis de encontrar do documento, enquanto eu tenho outras respostas com código vimscript ou como realizar ações mais complexas. .. Eu não entendo por que este é tão "bem-sucedido"
statox
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.