Ответ на оба вопроса - нет (я не знаю ни одного конвертера, и у меня нет файла с подсветкой синтаксиса q), но формат XML с подсветкой синтаксиса Notepad ++ выглядит чрезвычайно простым. У меня нет «Q», но я взглянул на один из веб-сайта , и перевод выглядит довольно тривиально. В этом случае вы можете выполнить большую часть работы с:
" 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/
Это генерирует много строк, которые выглядят так:
syn keyword Words1 case then do while
Вам нужно настроить синтаксический класс (в данном случае Words1), чтобы он был выделен в Vim (или синхронизировать его с тем, что будет выделено в Vim).
Возможно, вы могли бы иметь дело с символами с помощью регулярного выражения, но может быть проще просто сделать их вручную, поэтому конвертируйте:
<Keywords name="Operators">- ! " # $ & * , . ; ? @ \ ^ { | } ~ + < = ></Keywords>
в
syn match Operators /\<[-!"#$&*,.;?@\\^{|}~+<=>]/
(это \<
для обозначения границы слова, за которой следует класс символов [..]
со всеми символами в нем).
Затем вам просто нужно добавить:
if exists("b:current_syntax")
finish
endif
в начале и:
let b:current_syntax = "q"
в конце.
Конечно, это не поможет вам полностью, но, надеюсь, даст вам многое из того, что вам нужно, чтобы получить нужный файл синтаксиса. Существует множество справок:
:help syntax
и просмотрев примеры в каталоге синтаксиса папки времени выполнения.
Удачи!