¿Cómo puedo hacer que vim deje de dividir mis palabras en trozos?

8

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 \wcomo parte de su repertorio de expresiones regulares. Un ejemplo es neocompcache(que uso en lugar de neocompleteporque 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"?

Caleb
fuente
¿Qué codificación y codificación de archivos estás usando?
cxw
@cxw en utf-8todos los ámbitos. Y sí, se establece en ambas configuraciones.
Caleb
1
Has etiquetado esta pregunta como neovim . Te sugiero que abras un problema en el rastreador de problemas de NeoVim, si aún no lo hay. Esto probablemente no se solucionará en el corto plazo, pero será más adelante ... También puede intentar publicar un mensaje en vim_dev sobre esto, pero sospecho que todos estarán de acuerdo en que hay que hacer algo, después de lo cual nada cambios
Martin Tournoij
@Carpetsmoker Neovim Problema abierto .
Caleb

Respuestas:

5

\wes explícitamente abreviatura de [0-9A-Za-z_]. Use \ken su lugar si desea hacer coincidir los caracteres Unicode fuera de ese rango. Por ejemplo, /ger\kekpartidos gerçekleşiyor.

Por cierto, neocomplete es consciente de esto, pero no lo usa intencionalmente \k(por defecto) debido a problemas de rendimiento. Puede cambiar la g:neocomplete#keyword_patternsconfiguración de neocomplete . Ver también:

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

Justin M. Keyes
fuente
4

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.

cxw
fuente
1
Desafortunadamente, no tengo el control de todos los lugares donde se usan tales expresiones regulares. Se utiliza cualquier cantidad de complementos \wy, 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 \wfuncione. Bah.
Caleb