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ść
vim
regular-expression
Marco
fonte
fonte
[[: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.\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.Respostas:
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,
\w
corresponde 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.\I
pode ser configurado através daisident
opçã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).fonte
Use
\k
. Veja aiskeyword
opçãofonte
Funciona também para cirílico
Um pouco mais complicado e falha com cirílico
Doc .
Testado no Vim 7.4.
fonte
[=l=]
à lista que cobririał
(por exemplo, złoty), etc. também. Mas isso já falha para o russo. De qualquer forma, obrigado por compartilhar.