O destaque da sintaxe do Vim considera um lambda (->) em Java um erro

25

Estou usando o Vim para programar em Java 8 e estou tendo um problema com o destaque da sintaxe.

Um novo recurso do Java 8 é lambda apoio, o que resultou na criação do operador seta: ->. O Vim não reconhece isso como um operador válido em um arquivo * .java. Como tal, destaca esse operador em vermelho brilhante para chamar a atenção para o "erro de sintaxe". (Claro, isso realmente é uma sintaxe válida.)

Existe uma maneira de atualizar o "dicionário" do Vim de operadores permitidos e / ou corrigir o realce da sintaxe para evitar esse problema?

As duas primeiras linhas de :versionestado:

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

Patches incluídos: 1-52

apnorton
fonte

Respostas:

32

Atualização de 2016

O arquivo de sintaxe do Vim foi atualizado para isso na v7.4.649 (março de 2015); portanto, se você tiver esse patch, não precisará fazer isso.

A maneira mais fácil de corrigir isso é provavelmente baixando o arquivo mais recentesyntax/java.vim e colocando- ~/.vim/syntax/java.vimo, substituindo o padrão $VIMRUNTIME/syntax/java.vim. Você também precisará enviar html.vimum link simbólico para que isso funcione, pois java.vimdepende disso:

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

Resposta original

Meu /usr/share/vim/vim74/syntax/java.vimtem isso:

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

Veja a [^-]->parte? Isso causa o erro destacado.

Você pode substituir esta regra adicionando um ~/.vim/after/syntax/java.vimarquivo, com o mesmo padrão menos a sintaxe lambda:

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

E para pontos de bônus, podemos adicionar esta linha para destacar isso como uma função:

syn match javaFuncDef "[^-]->"

Considere arquivar um relatório de bug. :help bug-reportsexplica como. Parece haver mais construções (novas?) Destacadas como erro, como o ...in public static void main(String... args).

Martin Tournoij
fonte
11
A correspondência para os pontos de bônus não verifica se java_highlight_functionsfoi ativada. Se você é neurótico sobre a consistência, provavelmente deve checar antes da syn matchligação: if exists("java_highlight_functions") | syn match javaFuncDef "[^-]->" | endif
Zachary Murray
4

Não é necessário editar o arquivo de sintaxe padrão. O plugin vim-java tem suporte para isso. Basta instalar como qualquer outro plug-in e o operador lambda será destacado corretamente.

adelarsq
fonte
Você tem certeza? Porque eu não vejo nenhum código para ele, e o único commit que eu vejo apenas remove o ->javaError da mensagem "Não corresponde ao javaError se for um símbolo lambda" (mas não adiciona destaque como uma função).
Martin Tournoij 22/03
@Caspetsmoker Você está certo. Apenas remove a mensagem de erro. Mas eu prefiro assim.
adelarsq
2
Vejo que os arquivos de tempo de execução foram atualizados em março de 2015, e que o repositório ao qual você vincula não tem muitas correções que essas atualizações introduzem. FYI :-)
Martin Tournoij 23/03
@Carpetsmoker Nice. Funcionou como esperado. Obrigado =)
adelarsq