我有一个q / kdb +语言的语法高亮文件,我想将它转换为vim兼容文件,所以我的q代码看起来不会比平常更难看。
是否有可用的工具自动将notepad ++ xml语法高亮显示文件转换为vi版本?我环顾四周,但找不到任何东西。
或者,是否有人有vim q语法高亮文件?
答案 0 :(得分:6)
一个q / kdb + vim语法高亮文件: https://github.com/simongarland/vim
答案 1 :(得分:3)
这两个问题的答案都是否定(我不知道任何转换器,我没有q语法高亮文件),但突出显示XML格式的Notepad ++语法看起来非常简单。我手边没有'Q',但我看了website中的一个,翻译看起来很微不足道。在这种情况下,您可以完成大部分工作:
" 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
并查看运行时文件夹的语法目录中的示例。
祝你好运!