Regex do Vim: + precisa ser escapado, * não. Por que?

Regex do Vim: + precisa ser escapado, * não. Por que?

Suponha que você queira selecionar linhas que sejam: espaço em branco opcional, seguido por um número inteiro positivo, seguido por mais espaços em branco opcionais.

Aqui está um regex que funciona para isso:

:g/^\s*\d\+\s*/

O *operador não tem escape, enquanto o +é. Escapar *quebra o regex. O mesmo acontece com o un-escaping +.

Existe uma boa explicação para isso? Idealmente, algo para tornar a regra intuitiva. Com o vim, sempre tive dificuldade para escrever regexes por causa de regras de escape incomuns, então adoraria algumas dicas que fariam tudo funcionar para mim.

Responder1

É por razões históricas e quebraria a compatibilidade se fosse alterado. No entanto, você pode prefixar seu padrão com \vpara ativar "muito mágico", para que não precise fazer escapes especiais. Ver :help /\v.

informação relacionada