我有一个由我们的应用程序使用的自定义(基于文本)文件类型。它既不是 XML,也不是 JSON,也不是 YAML,而是一种满足我们需求的自定义格式(一种特定于领域的语言,如果你想这样称呼它的话)。我们使用 Visual Studio 编写这些文件,我们的应用程序使用自定义解析器解析它们。
现在,在编辑这些文件时在 Visual Studio 中进行语法突出显示会是 nice,因此我正在考虑为此目的编写一个 Visual Studio 扩展。
是否有一种easy的方法可以做到这一点(使用 C# 代码或正则表达式列表或某种标准语法格式)?到目前为止,我发现:
是否有一个简单的扩展点可以将自定义文件格式语法突出显示添加到我错过的 Visual Studio(非代码)?
正如 Fildor 在评论中指出的那样(如果他将评论移至答案,请确保对他的答案进行投票),可以通过 将 TextMate 语法文件 放入特殊目录来轻松扩展 Visual Studio 语法突出显示。
参考资料:
我尝试过,它运行得很好,除了一个需要注意的怪癖:TextMate 文档中描述的语法格式不是 Visual Studio 期望的格式。例如,参考文献 2 包括以下示例文件:
{ scopeName = 'source.untitled';
...
patterns = (
{ name = 'keyword.control.untitled';
match = '\b(if|while|for|return)\b';
}, ...
}
但是,出于某种奇怪的原因(对于熟悉 TextMate 的人来说这可能是非常明显的,但我却无法理解)Visual Studio 需要在 XML 文件中元编码此信息:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>scopeName</key>
<string>source.untitled</string>
...
<key>patterns</key>
<array>
<dict>
<key>name</key>
<string>keyword.control.untitled</string>
<key>match</key>
<string>\b(if|while|for|return)\b</string>
</dict>
...
</array>
</dict>
</plist>
长话短说,您需要执行以下操作:
C:\Program Files\Microsoft Visual Studio\2022\Professional\Common7\IDE\CommonExtensions\Microsoft\TextMate\Starterkit\Extensions
(将 Professional
替换为您的 Visual Studio 版本)。请注意,这些文件夹对应于编程语言(例如 bat
表示 DOS 批处理文件)。.tmLanguage
子文件夹中获取其 syntaxes
文件(例如 bat\syntaxes\Batch File.tmLanguage
)。%userprofile%\.vs\Extensions\MyFileFormat\Syntaxes\MyFileFormat.tmLanguage
。将 MyFileFormat
替换为您想要的文件格式。fileTypes
值修改为自定义文件格式使用的文件扩展名,并将 scopeName
设置为某项独一无二。