Конвертировать файл подсветки синтаксиса Notepad++ в vim (или у кого-нибудь есть файл подсветки синтаксиса q/kdb+ vim?)

У меня есть файл подсветки синтаксиса для языка q/kdb+, и я хотел бы преобразовать его в файл, совместимый с vim, чтобы мой код q не выглядел более уродливым, чем обычно.

Существуют ли утилиты для автоматического преобразования файлов с подсветкой синтаксиса notepad++ xml в версии vi? Я осмотрелся, но ничего не нашел.

В качестве альтернативы у кого-нибудь есть файл подсветки синтаксиса vim q?


person Peter Byrne    schedule 20.10.2010    source источник


Ответы (2)


файлы подсветки синтаксиса q/kdb+ vim: https://github.com/simongarland/vim

person Kon    schedule 18.12.2010

Ответ на оба вопроса - нет (я не знаю никаких конвертеров и у меня нет файла подсветки синтаксиса 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

Вам придется настроить класс синтаксиса (в данном случае Word1), чтобы он был выделен в Vim (или синхронизировать его с чем-то, что будет выделено в Vim).

Вероятно, вы могли бы обрабатывать символы с помощью регулярного выражения, но может быть проще просто сделать их вручную, поэтому преобразуйте:

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

в:

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

(это \< для обозначения границы слова, за которым следует класс символов [..] со всеми символами в нем).

Затем вам просто нужно добавить:

if exists("b:current_syntax")
    finish
endif

в начале и:

let b:current_syntax = "q"

в конце.

Конечно, это не поможет вам полностью, но, надеюсь, даст вам многое из того, что вам нужно, чтобы получить файл синтаксиса, который вы хотите. Существует много помощи, доступной в:

:help syntax

и просмотрев примеры в каталоге синтаксиса папки среды выполнения.

Удачи!

person DrAl    schedule 20.10.2010
comment
Спасибо за советы! Это должно упростить процесс создания vim-файла, он не выглядит очень сложным. Я просто ленив. - person Peter Byrne; 20.10.2010