L'evidenziazione della sintassi di Vim considera un lambda (->) in Java un errore


25

Sto usando Vim per programmare in Java 8 e sto riscontrando un problema con l'evidenziazione della sintassi.

Una nuova funzionalità di Java 8 è lambda supporto, che ha portato alla creazione dell'operatore freccia: ->. Vim non riconosce questo come operatore valido in un file * .java. Come tale, evidenzia questo operatore in rosso vivo per attirare l'attenzione sull'errore di sintassi. (Certo, questa è davvero una sintassi valida.)

Esiste un modo per aggiornare il "dizionario" di Vim degli operatori consentiti e / o correggere l'evidenziazione della sintassi per evitare questo problema?

Le prime due linee di :versionstato:

VIM - Vi IMproved 7.4 (10 agosto 2013, compilato il 2 gennaio 2014 19:39:32)

Patch incluse: 1-52

Risposte:


32

Aggiornamento 2016

Il file di sintassi Vim è stato aggiornato per questo nella v7.4.649 (marzo 2015); quindi se hai questa patch non è necessario farlo.

Il modo più semplice per risolvere questo problema è probabilmente scaricando il file più recentesyntax/java.vim e inserendolo in ~/.vim/syntax/java.vimmodo da sovrascrivere il valore predefinito $VIMRUNTIME/syntax/java.vim. Dovrai anche un link simbolico html.vimaffinché funzioni, in quanto java.vimdipende da questo:

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

Risposta originale

Il mio /usr/share/vim/vim74/syntax/java.vimha questo:

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

Vedi la [^-]->parte? Ciò causa l'evidenziazione dell'errore.

È possibile ignorare questa regola aggiungendo un ~/.vim/after/syntax/java.vimfile, con lo stesso modello meno la sintassi lambda:

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

E per i punti bonus, possiamo aggiungere questa riga per evidenziarlo come funzione:

syn match javaFuncDef "[^-]->"

Valuta di presentare una segnalazione di bug. :help bug-reportsspiega come. Sembra che ci siano più (nuovi?) Costrutti che sono evidenziati come un errore, come ...in public static void main(String... args).


1
La corrispondenza per i punti bonus non verifica se java_highlight_functionsè stata abilitata. Se sei nevrotico riguardo alla coerenza, probabilmente dovresti verificarlo prima della syn matchchiamata: if exists("java_highlight_functions") | syn match javaFuncDef "[^-]->" | endif
Zachary Murray

4

Non è necessario modificare il file di sintassi predefinito. Il plug -in vim-java ha il supporto per questo. Basta installarlo come qualsiasi altro plugin e l'operatore lambda verrà evidenziato correttamente.


Sei sicuro? Perché non vedo alcun codice per esso, e l' unico commit che vedo rimuove ->da javaError solo il messaggio "Non abbinare javaError se è un simbolo lambda" (ma non aggiunge l'evidenziazione come funzione).
Martin Tournoij,

@Caspetsmoker Hai ragione. Rimuove semplicemente il messaggio di errore. Ma preferisco così.
adelarsq,

2
Vedo che i file di runtime sono stati aggiornati a marzo 2015 tra l'altro e che il repository a cui ti colleghi non ha molte correzioni introdotte da questo aggiornamento. Cordiali saluti :-)
Martin Tournoij,

@Carpetsmoker Nice. Ha funzionato come previsto. Grazie =)
adelarsq,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.