Corresponde à palavra que contém caracteres além de a-zA-Z

15

Para combinar uma palavra, pode-se usar

\v(\w+)

Na ajuda do vim :h \w:

\ w caractere da palavra: [0-9A-Za-z_]

Isso funciona exatamente como descrito no manual. No entanto, quero combinar palavras que contenham caracteres além a-z, por exemplo, prästgården . A correspondência da expressão regular \v(\w+)com o prästgården gera três correspondências:

prästgården
^^ ^^^ ^^^^

Como combinar palavras que contenham caracteres além a-z? Meu local está definido como inglês e, se possível, eu gostaria de mantê-lo dessa maneira.

Editar: as palavras podem não pertencer a um único local, por exemplo

prästgården
treść
Marco
fonte
As classes de caracteres POSIX (por exemplo [[:alpha:]]\+, neste caso) devem fazer o que você deseja aqui, mas de acordo com os documentos do Vim ( :help regex), isso não acontece: "Esses itens funcionam apenas para caracteres de 8 bits." Por acaso, funciona aqui com o Vim 7.3 no OS X 10.8, mas o Vim 7.3 no Linux não funciona, então suponho que haja algo específico da Apple sobre esse Vim que permita. Você também verá que fazê-lo através da ligação do Vim Perl também falha, mesmo que o Perl tenha um suporte Unicode muito bom. Pode ser necessário alternar para um script Perl externo, para ativar o suporte completo a Unicode.
Warren Young
A propósito, se você usa Perl, deseja usar em \p{Word}vez de uma classe de caracteres POSIX. Existem muitos casos de exceção no tratamento da classe de caracteres POSIX do Perl, que você evita ao usar as propriedades Unicode.
21813 Warren Young

Respostas:

9

O Vim (a partir da versão 7.3) é muito limitado em relação ao suporte de caracteres não ASCII nos padrões. Em particular, \wcorresponde apenas às letras ASCII, que são de utilidade limitada.

Existem alguns padrões de classe de caracteres que suportam Unicode. De seu interesse \I, que em geral corresponde a letras e apenas letras, mais _e @. Pelo menos no squeeze do Debian (em um local UTF-8), há erros; por exemplo, ×e ÷são correspondidos como letras, mas todas as letras acentuadas em latim parecem ser reconhecidas corretamente. \Ipode ser configurado através da isidentopção, pelo menos para a parte ASCII.

Se você deseja suporte sério a Unicode, precisará confiar em uma ferramenta externa. Por exemplo, perl -C -e '/\p{L}/'para corresponder às letras UTF-8 (assumindo uma localidade UTF-8).

Gilles 'SO- parar de ser mau'
fonte
3

Use \k. Veja a iskeywordopção

Hans Ginzel
fonte
2

Funciona também para cirílico

\v\k

Um pouco mais complicado e falha com cirílico

\v(\c[0-9a-z_[=a=][=c=][=e=][=i=][=l=][=n=][=o=][=r=][=s=][=t=][=u=][=y=][=z=]])

Doc .

Testado no Vim 7.4.

pevik
fonte
Eu adicionaria [=l=]à lista que cobriria ł(por exemplo, złoty), etc. também. Mas isso já falha para o russo. De qualquer forma, obrigado por compartilhar.
Marco