Конвертировать файл подсветки синтаксиса Notepad ++ в vim (или у кого-нибудь есть файл выделения синтаксиса aq / kdb + vim?) - PullRequest
4 голосов
/ 20 октября 2010

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

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

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

Ответы [ 2 ]

6 голосов
/ 19 декабря 2010

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

3 голосов
/ 20 октября 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

Вам нужно настроить синтаксический класс (в данном случае Words1), чтобы он был выделен в 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

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

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...