4

I have a syntax highlighting file for the q/kdb+ language and I'd like to convert it to a vim compatible file so my q code won't look any more ugly than usual.

Are there utilities available to automatically convert notepad++ xml syntax highlighting files to vi versions? I had a look around but I couldn't find anything.

Alternatively does anyone have a vim q syntax highlighting file?

4

2 回答 2

6

aq/kdb+ vim 语法高亮文件: https ://github.com/simongarland/vim

于 2010-12-18T21:34:36.977 回答
4

这两个问题的答案是否定的(我不知道任何转换器,也没有 aq 语法高亮文件),但 Notepad++ 语法高亮 XML 格式看起来非常简单。我手头没有“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

并通过查看运行时文件夹的语法目录中的示例。

祝你好运!

于 2010-10-20T15:02:04.043 回答