Los usuarios del idioma inglés probablemente no tengan este problema, pero vim es bastante tonto cuando se trata de expresiones regulares. En mi caso, la mayoría de las letras en el alfabeto turco fuera del alfabeto EN no parecen calificar como caracteres de palabras.
Dado un documento que contiene una palabra turca:
gerçekleşiyor
La expresión de búsqueda
/ger\wek
... no coincidirá con el comienzo de la palabra. Por alguna razón, ç no es un carácter de palabra.
Esto se vuelve enloquecedor cuando los complementos se usan \w
como parte de su repertorio de expresiones regulares. Un ejemplo es neocompcache
(que uso en lugar de neocomplete
porque es compatible con Neovim). Al excluir conjuntos de reglas de coincidencia adicionales para alguna sintaxis de idioma, el autocompletado solo ocurre en fragmentos de tamaño de palabra. Cuando escribo grandes cantidades de prosa turca, en realidad sería útil tener un autocompletado funcional, pero con la mayoría de las palabras divididas en trozos más pequeños con los caracteres turcos omitidos, es más que inútil.
¿Cómo puedo convencer a vim (preferiblemente neovim si es importante) para que acepte una gama más amplia de caracteres como caracteres de "palabra"?
utf-8
todos los ámbitos. Y sí, se establece en ambas configuraciones.Respuestas:
\w
es explícitamente abreviatura de[0-9A-Za-z_]
. Use\k
en su lugar si desea hacer coincidir los caracteres Unicode fuera de ese rango. Por ejemplo,/ger\kek
partidosgerçekleşiyor
.Por cierto, neocomplete es consciente de esto, pero no lo usa intencionalmente
\k
(por defecto) debido a problemas de rendimiento. Puede cambiar lag:neocomplete#keyword_patterns
configuración de neocomplete . Ver también:https://github.com/Shougo/neocomplete.vim/issues/207
fuente
Parece que no hay una manera fácil de redefinir
\w
. Ver, por ejemplo, Vim regex coincide con caracteres unicode son como no palabra y coincide con palabras que contienen caracteres más allá de a-zA-Z .Sin embargo, es posible que pueda utilizar un rango de medida, si no le importa volver a escribir con regularidad (ha):
[a-zA-Z\%u00c7-\%u015f]
. Desafortunadamente, también coincidirá con muchos caracteres no turcos, pero si esos caracteres no aparecen en su texto, podría estar bien.fuente
\w
y, por lo tanto, todos se caen cuando se trata de esto. En lugar de parchear cada uno (si puedo localizar a los culpables) sería más fácil parchear vim para que\w
funcione. Bah.