Os usuários do idioma inglês provavelmente não têm esse problema, mas o vim é bastante idiota quando se trata de expressões regulares. No meu caso, a maioria das letras do alfabeto turco fora do alfabeto EN parece não se qualificar como caracteres de palavras.
Dado um documento que contém uma palavra turca:
gerçekleşiyor
A expressão de pesquisa
/ger\wek
… Não coincidirá com o início da palavra. Por qualquer motivo, ç não é um caractere de palavra.
Isso se torna enlouquecedor quando os plug-ins são usados \w
como parte de seu repertório de expressões regulares. Um caso em questão é neocompcache
(que eu uso em vez de neocomplete
porque é compatível com o Neovim). Ao excluir conjuntos de regras correspondentes extras para algumas sintaxes de idiomas, o preenchimento automático ocorre apenas em blocos do tamanho de palavras. Quando estou escrevendo grandes quantidades de prosa turca, seria realmente útil ter o preenchimento automático funcional, mas com a maioria das palavras sendo divididas em pedaços menores com os caracteres turcos deixados de fora, é inútil.
Como convencer o vim (de preferência o neovim, se for o caso) a aceitar um intervalo maior de caracteres como caracteres "word"?
utf-8
em geral. E sim, é definido em ambas as configurações.Respostas:
\w
é explicitamente abreviado para[0-9A-Za-z_]
. Use, em\k
vez disso, se desejar corresponder caracteres Unicode fora desse intervalo. Por exemplo,/ger\kek
combinagerçekleşiyor
.A propósito, o neocompleto está ciente disso, mas intencionalmente não o usa
\k
(por padrão) devido a problemas de desempenho. Você pode alterar ag:neocomplete#keyword_patterns
configuração do neocompleto . Veja também:https://github.com/Shougo/neocomplete.vim/issues/207
fonte
Parece que não há uma maneira fácil de redefinir
\w
. Veja, por exemplo, que o Vim regex corresponde a caracteres unicode como não-palavra e a palavra Match contendo caracteres além de a-zA-Z .No entanto, você pode ser capaz de usar um intervalo personalizado, se você não se importa redigitação-lo regularmente (ha):
[a-zA-Z\%u00c7-\%u015f]
. Infelizmente, isso também corresponderá a muitos caracteres que não são turcos, mas se esses caracteres não aparecerem no seu texto, isso pode ser bom.fonte
\w
e, portanto, todos caem quando se trata disso. Em vez de consertar todos os itens desde então (se é que consigo rastrear os culpados), seria mais fácil corrigir o vim para que\w
funcionasse. Bah.