Vim no toma diéresis como caracteres de palabras

9

Cuando escribo un texto en alemán que contiene algo como, abücdpor ejemplo, y dwdelante, solo eliminará el, abya que no se interpreta ücomo un carácter de palabra.

Cuando edito reStructuredText, tengo

iskeyword=38,42,43,45,47-58,60-62,64-90,97-122,_

Eso explica por qué las diéresis no están marcadas, pero no entiendo de dónde proviene. Cuando acabo de abrir gVim, esto se establece en

iskeyword=@,48-57,_,192-255

¿De dónde podría venir esto?

Martin Ueding
fuente
3
Poner set encoding=utf-8en tu .vimrc.
Cuonglm
Eso ya está en mi .vim/vimrcy :set enc?me da utf-8. Lo mismo con fenc. Aún así no funciona.
Martin Ueding
Después :set iskeyword&se üsigue no se reconoce como una parte de una palabra?
ryuichiro
Mostrar como su palabra clave ( set iskeyword). Debería ser algo como "@,48-57,_,128-167,224-235"o "@,48-57,_,192-255". ¿Estás usando Vim o Vi? (el valor predeterminado en Vi ( "@,48-57,_") no reconoce ü; el valor predeterminado en Vim está bien)
JJoao
1
Yo uso gVim y tengo iskeyword=@,48-57,_,192-255. Funciona mágicamente en una nueva instancia de Vim ahora. Eso es extraño, tengo que observar eso con más cuidado.
Martin Ueding

Respuestas:

5

El @carácter en iskeywordincluye todos los caracteres para los cuales isalpha()(función C) es VERDADERO; en implementaciones modernas de libc (últimos 20 años) esto también busca caracteres unicode.

Su segundo iskeyworduso 97-122(az) y 64-90(AZ), que no incluye todas las variantes con los diversos signos diacríticos (como la diéresis / diéresis / trema).

Entonces la solución es reemplazar 97-122y 64-90con @.

Este funky iskeywordproviene del archivo de sintaxis LISP; el rstarchivo de sintaxis incluye un montón de otros archivos de sintaxis para resaltar los bloques de código.

Afortunadamente, puede establecer qué idiomas incluir con la g:rst_syntax_code_listvariable. El valor predeterminado es:

let g:rst_syntax_code_list = ['vim', 'java', 'cpp', 'lisp', 'php', 'python', 'perl']

Como es poco probable que necesite resaltar la sintaxis de LISP en su archivo reStructuredText, probablemente pueda eliminarlo. Simplemente agréguelo a cualquier parte de su archivo vimrc, si está definido, el archivo de sintaxis usará ese valor en lugar de definir el suyo.

En mi opinión, probablemente quieras usar:

let g:rst_syntax_code_list = []

Porque quién sabe qué efectos cobardes causan los otros archivos de sintaxis ...

Martin Tournoij
fuente
¡Genial, gracias! Esto no me sucedió en Ubuntu hasta ahora, solo sucedió aquí en Fedora 22. Probablemente sus archivos de sintaxis son un poco diferentes. Ahora funciona.
Martin Ueding
La sugerencia con la @posición de caracteres alfanuméricos fue realmente útil.
Zelphir Kaltstahl
1

Si se incorporan gramáticas de otros idiomas, por ejemplo, en archivos de descuento, la configuración de esos idiomas parece anular la configuración de la sintaxis de descuento. Uno puede verificar si ese es el caso usando:

:verbose set iskeyword?

Para solucionar esto, se puede definir un comando automático para ejecutarse cada vez que se ingresa un archivo de reducción (y probablemente también en otros idiomas):

autocmd BufEnter,BufNewFile *.md set iskeyword=38,42,43,45,47-58,60-62,_,@

Poner esto en mi .vimrcsolucionó el problema para mí. Yo estaba usando vim-pandocla sintaxis y los idiomas incluyendo inline racket, python, shy algunos. Creo que no es necesario definir un comando automático para dejar archivos de descuento, porque cuando ingresas archivos de otros idiomas, sus archivos de sintaxis deberían establecer sus palabras clave, si entiendo correctamente.

Zelphir Kaltstahl
fuente