为 Scheme 中的字符文字调整 Vim 语法文件

Tweaking Vim syntax file for character literals in Scheme

对于热爱代码的人来说,没有什么比看丑陋的代码更糟糕的了。 debian 上编辑器 vim 的当前语法高亮文件 scheme.vim 似乎无法识别某些完全合法的字符文字(至少在 guile 或确实 scm).例如,引用十六进制 unicode 点 0x0000 的字符文字 #\x0000 被识别并正确显示,但如果我使用八进制表示 #[=18=]0 或名称表示 #\nul,然后 vim 给我这个亮橙色(我猜是为了突出显示错误情况)。有没有人有帮助我解决这个问题的建议?

这是评论内容的更完善的版本:

现有语法文件 scheme.vim 可能识别字符文字的某些名称,例如 #\newline,这为我们提供了一个搜索位置的起点:

syn match schemeCharacter "#\newline"

然后只需将类似的行添加到具有新的所需名称的文件中...

syn match schemeCharacter "#\linefeed"
...

现在我们知道现有文件正确地格式化了字符文字,其中 unicode 点以十六进制形式表示。搜索 schemeCharacter 的其他出现,我们发现:

syn match schemeCharacter "#\x[0-9a-fA-F]\+"

这看起来确实像是一种指定正则表达式以匹配以 #\x 开头的十六进制文字的方法。为了为八进制格式的字符文字添加语法识别,我们只需要添加另一行带有适当正则表达式的这种类型,这次允许解析八进制文字:

syn match schemeCharacter "#\[0-7]\+"

注意:根据 GNU guile 手册,R7RS 使用文字 #\escape 而不是 #\esc(或以及?)。如果你想让语法文件识别这两个文字,你不能简单地将与 'escape' 相关的行放在第一位。也许将 'esc' 的行替换为:

 syn match schemeCharacter "#\esc[^a]"

这表示您将匹配任何 #\esc,前提是它后面没有跟 a