我过去为简单的自定义格式做了几个语法高亮显示文件(甚至更改了格式,以便能够根据我的技能制作语法文件,在效果中)。< / 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对我的示例应用了一种语法高亮,这可能会误导
答案 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"