2010-10-20 6 views
5

Ho un file di evidenziazione della sintassi per il linguaggio q/kdb + e mi piacerebbe convertirlo in un file compatibile vim in modo il mio codice q non sembrerà più brutto del solito.Converti Notepad ++ sintassi di evidenziazione del file su vim (o qualcuno ha file di evidenziazione sintassi aq/kdb + vim?)

Sono disponibili programmi di utilità per convertire automaticamente i file di evidenziazione della sintassi notepad ++ xml in versioni vi? Ho dato un'occhiata in giro ma non ho trovato nulla.

In alternativa qualcuno ha un file di evidenziazione della sintassi vim q?

risposta

4

La risposta ad entrambe le domande è no (non conosco alcun convertitore e non ho un file di evidenziazione della sintassi q), ma la sintassi Notepad ++ che evidenzia il formato XML sembra estremamente semplice. Non ho la "Q" a portata di mano, ma ho dato un'occhiata a uno di quelli da website e la traduzione sembra piuttosto banale. In tal caso, si potrebbe fare la maggior parte del lavoro con:

" Remove all the lines that aren't lists of keywords 
" (there doesn't seem to be anything much more complicated 
" than that in the definition file) 
:g!/<Keywords name=/d 
" Convert the lines (fairly poor XML parsing here!) 
:%s/\s*<Keywords name="\([^"]\+\)">\([[:alpha:]_ ]\{-}\)<\/Keywords>/syn keyword \1 \2/ 

Questo genera un sacco di linee che sembrano:

syn keyword Words1 case then do while 

Dovrete modificare la classe di sintassi (Words1 in questo caso) per essere qualcosa che verrà evidenziato in Vim (o sincronizzarlo in link con qualcosa che verrà evidenziato in Vim).

Probabilmente si potrebbe quindi trattare con i simboli con una regexp, ma potrebbe essere più facile da fare solo loro a mano, in modo da convertire:

<Keywords name="Operators">- ! &quot; # $ &amp; * , . ; ? @ \^{ | } ~ + &lt; = &gt;</Keywords> 

in:

syn match Operators /\<[-!"#$&*,.;[email protected]\\^{|}~+<=>]/ 

(questo è \< per contrassegnare un limite di parole, seguito da una classe di caratteri [..] con tutti i simboli in esso contenuti).

Si sarebbe quindi solo bisogno di aggiungere:

if exists("b:current_syntax") 
    finish 
endif 

all'inizio e:

let b:current_syntax = "q" 

alla fine.

Ovviamente, questo non ti porta fino in fondo, ma spero che ti dia un sacco di quello che ti serve per ottenere il file di sintassi che desideri. C'è abbondanza di aiuto disponibile in:

:help syntax 

e osservando gli esempi nella directory di sintassi della cartella di runtime.

Buona fortuna!

+0

Grazie per i suggerimenti! Questo dovrebbe rendere più semplice il processo di creazione di un file Vim, non sembra molto complicato .. Sono solo pigro. –