Como posso fazer com que o vim pare de dividir minhas palavras em pedaços?

8

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 \wcomo parte de seu repertório de expressões regulares. Um caso em questão é neocompcache(que eu uso em vez de neocompleteporque é 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"?

Caleb
fonte
Qual codificação e codificação de arquivo você está usando?
Cxw 27/06/2015
@cxw utf-8em geral. E sim, é definido em ambas as configurações.
Caleb
1
Você marcou esta pergunta como neovim . Sugiro que você abra um problema no rastreador de problemas do NeoVim, se ainda não houver um. Provavelmente isso não será corrigido no curto prazo, mas estará abaixo da linha ... Você também pode tentar postar uma mensagem para vim_dev sobre isso, mas suspeito que todos concordarão que algo precisa ser feito, após o que nada alterar.
Martin Tournoij
Abertura do @Carpetsmoker Neovim .
Caleb

Respostas:

5

\wé explicitamente abreviado para [0-9A-Za-z_]. Use, em \kvez disso, se desejar corresponder caracteres Unicode fora desse intervalo. Por exemplo, /ger\kekcombina gerç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 a g:neocomplete#keyword_patternsconfiguração do neocompleto . Veja também:

https://github.com/Shougo/neocomplete.vim/issues/207

Justin M. Keyes
fonte
4

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.

cxw
fonte
1
Infelizmente, não estou no controle de todos os lugares em que essas expressões regulares são usadas. Muitos plugins são usados \we, 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 \wfuncionasse. Bah.
Caleb