El resaltado de sintaxis de Vim considera que un lambda (->) en Java es un error

25

Estoy usando Vim para programar en Java 8, y tengo un problema con el resaltado de sintaxis.

Una nueva característica en Java 8 es lambda soporte, lo que dio lugar a la creación del operador de flecha: ->. Vim no reconoce esto como un operador válido en un archivo * .java. Como tal, resalta este operador en rojo brillante para llamar la atención sobre el "error de sintaxis". (Por supuesto, esta es una sintaxis válida).

¿Hay alguna forma de actualizar el "diccionario" de Vim de operadores permitidos y / o corregir el resaltado de sintaxis para evitar este problema?

Las dos primeras líneas de :versionestado:

VIM - Vi IMproved 7.4 (10 de agosto de 2013, compilado el 2 de enero de 2014 19:39:32)

Parches incluidos: 1-52

Apnorton
fuente

Respuestas:

32

Actualización 2016

El archivo de sintaxis de Vim se actualizó para esto en v7.4.649 (marzo de 2015); así que si tienes este parche no necesitas hacer esto.

La forma más fácil de solucionar esto es probablemente descargando el archivo más nuevosyntax/java.vim y colocándolo ~/.vim/syntax/java.vimpara que anule el valor predeterminado $VIMRUNTIME/syntax/java.vim. También necesitará un enlace simbólico html.vimpara que esto funcione, ya que java.vimdepende de esto:

ln -s /usr/share/vim/vim74/syntax/html.vim ~/.vim/syntax/

Respuesta original

Mi /usr/share/vim/vim74/syntax/java.vimtiene esto:

syn match javaError "<<<\|\.\.\|=>\|||=\|&&=\|[^-]->\|\*\/"

¿Ves la [^-]->parte? Eso provoca el error de resaltado.

Puede anular esta regla agregando un ~/.vim/after/syntax/java.vimarchivo, con el mismo patrón menos la sintaxis lambda:

syn clear javaError
syn match javaError "<<<\|\.\.\|=>\|||=\|&&=\|\*\/"

Y para puntos de bonificación, podemos agregar esta línea para resaltar esto como una función:

syn match javaFuncDef "[^-]->"

Considere presentar un informe de error. :help bug-reportsexplica cómo. Parece que hay más construcciones (¿nuevas?) Que se resaltan como un error, como el ...in public static void main(String... args).

Martin Tournoij
fuente
1
La coincidencia de los puntos de bonificación no comprueba si java_highlight_functionsse ha habilitado. Si eres neurótico acerca de la consistencia, probablemente deberías verificarlo antes de la syn matchllamada: if exists("java_highlight_functions") | syn match javaFuncDef "[^-]->" | endif
Zachary Murray
4

No es necesario editar el archivo de sintaxis predeterminado. El complemento vim-java tiene soporte para esto. Simplemente instale como cualquier otro complemento y el operador lambda se resaltará correctamente.

adelarsq
fuente
¿Estás seguro? Debido a que no veo ningún código para él, y la única confirmación que veo solo elimina el ->de javaError con el mensaje "No coincida con javaError si es un símbolo lambda" (pero no agrega resaltado como una función).
Martin Tournoij
@Caspetsmoker Tienes razón. Simplemente elimina el mensaje de error. Pero prefiero así.
adelarsq
2
Veo que los archivos de tiempo de ejecución se actualizaron en marzo de 2015 por cierto, y que el repositorio al que se vincula no tiene muchas correcciones que presenta esta actualización. FYI :-)
Martin Tournoij
@Carpetsmoker Nice. Funcionó como se esperaba. Gracias =)
adelarsq