Existe um padrão como ^ in vim?

20

No modo normal do Vim, o 0comando leva você para a primeira coluna da linha e ^o início lógico da linha (por exemplo, o primeiro caractere que não é um espaço em branco). No mundo regex, ^corresponde ao primeiro caractere da linha, com espaço em branco ou não. O Vim tem um padrão que se comporta como o comando '^' - correspondendo ao início lógico de uma linha?

Michael
fonte
Eu acho que ^ em uma regex normalmente corresponde ao início da linha, não ao primeiro caractere. ^. corresponderá ao início e, em seguida, ao primeiro caractere, não ao início e, em seguida, ao segundo caractere.
precisa

Respostas:

17

Não há atalho para corresponder ao primeiro caractere que não seja um espaço em branco em uma linha; você deve criar o padrão sozinho, como:

^\s*restofpattern

Se você não deseja incluir o espaço em branco na sua correspondência, use uma asserção de largura zero, como:

\(^\s*\)\@<=restofpattern

Não é exatamente bonito, mas pelo menos faz o trabalho.

Karl Bielefeldt
fonte
6

Para corresponder ao primeiro caractere que não seja um espaço em branco, você usaria \Snormalmente.


Se você usar ^um regex no vim, ele corresponderá ao início real da linha, mesmo que contenha espaço em branco.

Por exemplo, esta linha começa com um espaço:

 <- there's a space there you can't see :)

Este comando vim removerá o espaço inicial:

:%s/^ //

resultando no seguinte:

<- there's a space there you can't see :)

Portanto, o regex se comportará conforme o esperado, mesmo que o comando não o faça.

Michael Hampton
fonte
Eu presumo que você vai explicar o voto negativo. Esta resposta, tanto quanto eu sei, está correta.
Michael Hampton
11
Não diminuí a votação, mas, a título de esclarecimento: estava pensando se o Vim tem um operador para corresponder ao primeiro caractere não em branco da linha. O ^operador (como todas as implementações de sã regex) corresponderá ao primeiro caractere, mesmo que seja um espaço em branco.
Michael
Bem, como você esperava fazer isso normalmente? Geralmente em uma regex, você usaria algo parecido \Scom o primeiro caractere que não é um espaço em branco.
Michael Hampton
2
\Scorresponderá a qualquer caractere que não seja um espaço em branco. Dito de outra forma, eu estou querendo saber se Vim tem uma forma abreviada de largura zero para isso: ^\W*\S.
Michael
11
Nenhum mecanismo que eu conheço fornece essa funcionalidade, mas, novamente - quando você se importaria em um mecanismo de uso geral? O Vim não é um mecanismo regex de uso geral. É um editor que possui um mecanismo de regex, então eu queria saber se havia alguma construção especial para algo que só importa dentro de um editor.
Michael Michael