gvim语法突出显示不同类型的行

时间:2016-10-23 20:33:01

标签: regex vim syntax-highlighting file-format vim-syntax-highlighting

我过去为简单的自定义格式做了几个语法高亮显示文件(甚至更改了格式,以便能够根据我的技能制作语法文件,在效果中)。< / p>

但这次我感到困惑,我会感激一些帮助。

文件格式(显然)是一个文本文件,其中每行包含由空格分隔的三个不同元素,它们可以是“符号”(包含一系列字母数字字符加连字符的名称)或“字符串”(一系列任何字符串) chars,包括空格,但不包括管道。)

字符串只能在行的开头或结尾处,中间元素只能是符号。如果字符串是第一个元素,则字符串由末端的管道分隔,如果它是最后一个元素,则在开头分隔。

但是,一行也可以是所有符号,字符串优先和其余符号,以及字符串最后和休息符号。

如果字符串是第一个元素,则字符串总是后跟一个管道,或者 如果它们是最后一个元素,则使用管道作为前缀。

示例:

所有符号

this-is-a-symbol another-one and-another

第一个字符串

This is a string potentially containing any char| symbol symbol

最后一个字符串

symbol symbol |A string at the end of the line

作为字符串的第一个和最后一个

This is a string| now-we-have-a-symbol |And here another string

这四个例子是正确格式化的唯一可能性。

所有符号需要以不同的颜色着色,第一个元素的特定颜色,第二个元素的特定颜色和第三个元素的特定颜色。 但无论位置如何,字符串都会有一种独特的颜色。

如果管道字符可以用与背景颜色相似(不完全相同)的颜色“变暗”,这将是一个很大的优点。但我想我可以自己管理。

文件中的一行不像显示的那样,必须突出显示为错误(如红色背景)。

一些帮助?

ps:stackoverflow对我的示例应用了一种语法高亮,这可能会误导

1 个答案:

答案 0 :(得分:0)

我发现了一种比我最初认为的正则表达式更简单的方法。最后我只需要匹配第一个元素和最后一个元素,我怎么能不想到......所以这是我的解决方案,它似乎适用于我的细节。它只是不突出显示格式错误的行。现在好了。感谢您的耐心和关注。

" Vim syntax file
" Language:         ff .txt

if exists("b:current_syntax")
  finish
endif

setlocal iskeyword+=:

syn match Asymbol /^[a-zA-Z0-9\-]* /
syn match Csymbol / [a-zA-Z0-9\-]*$/
syn match Astring /^.*| /
syn match Cstring / |.*$/

highlight link Asymbol Constant
highlight link Csymbol Statement
highlight link Astring Include
highlight link Cstring Comment

let b:current_syntax = "ff"