为 VS 2008 自定义语法高亮

20

最近我一直在使用John Lam's Vibrant Ink VS颜色方案,想要调整它以使得类的方法名以不同的颜色突出显示。结果,VS中没有这样的选项。

Resharper有一个功能可以提供自定义语法高亮。我想知道编写一个小插件来提供细粒度的自定义语法高亮有多难?是否有类似的开源插件可用?

编辑

谢谢大家,我使用DXCore进行了一些修改,现在我的VS看起来非常像TextMate。

VS看起来很棒 http://img14.imageshack.us/img14/637/awesomevsgq1.png

** 注意 **

我必须稍微修改Rory的代码片段,以便它可以处理C#中的点方法名和相等运算符。

现在我正在使用:

            string name = ea.LanguageElement.Name.Split('.').Last();

            if (name == ("op_Equality")) {
                name = "==";
            } else if (name == "op_Inequality") {
                name = "!=";
            }

            ea.PaintArgs.OverlayText(name, 
                ea.LanguageElement.NameRange.Start, 
                Color.FromArgb(255,204,0)); 

我认为在VS中它被称为插件。 - Avram
5个回答

11

正如Brian所说... My PaintIt插件 将给您一些关于 DXCore 可以做什么的想法。

此外,我们的 "Community Plugin Site" 上还有一些其他的 "装饰性插件",如果您有任何具体问题,我们在 DevExpress IDE Tools 论坛上也有一个不错的社区。

DXCoreRefactorProCodeRush 构建的框架,这应该让您了解它们所能实现的图形能力类型。

尽管如此,您并不需要使用这两个工具来使用 DXCore

社区网站上的所有内容都是"开源的"PaintIt也是)

为了让您了解事情有多简单...下面的代码是您需要添加到基本插件模板中以使用DXCore启动基础功能所需的全部内容...

Private Sub PlugIn_EditorPaintLanguageElement(ByVal ea As DevExpress.CodeRush.Core.EditorPaintLanguageElementEventArgs) Handles Me.EditorPaintLanguageElement
    If ea.LanguageElement.ElementType = LanguageElementType.Method Then
        ea.PaintArgs.OverlayText(ea.LanguageElement.Name, _
                                 ea.LanguageElement.NameRange.Start, _
                                 Color.HotPink)
    End If
End Sub

我已经根据这段代码创建了一个插件(称为CR_ColorizeMemberNames),并将其添加到Community Plugin Site
二进制文件可以从我的网站here下载。
您只需下载和安装DXCore,并将插件的二进制文件放置在插件文件夹中(默认情况下为C:\Program Files\Developer Express Inc\ DXCore for Visual Studio .NET\2.0\Bin\Plugins)。然后启动VS,您的方法名称应该全部显示为HotPink(可爱的)。

Rory,我在使用paintit时遇到了麻烦,但是使用你的代码片段,我成功地将所有内容连接起来了(请看我的屏幕截图)。非常感谢。 - Sam Saffron

4
超越简单的关键字着色,有关Visual Studio语法着色的详细信息在此处定义;并且实现的详细信息在此处实现
这些文档概述了底层的管道是如何工作的,并更重要的是详细介绍了如何连接自己的管道。

1
这些是从零开始定义语言服务的文档。 如果他这样做了,他将需要重新实现所有内容,包括智能感知。那将非常昂贵。 - Scott Wisniewski

3
如果您想自己编写插件,我建议使用DevExpress的DXCore。我知道您可以使用此插件将自己的可视元素添加到VS2008中,而且我相信它也是免费的。有一个庞大的社区可以帮助您编写自己的插件,甚至可能已经为您制作了一个插件。
我非常喜欢DevExpress,并且运行Refactor!和CodeRush。

2

是的,我在附近 :) 你可以给我发电子邮件Rorybecker@gmail.com或者关注我的推特twitter.com/rorybecker。那段代码现在相当老了,但是我正在努力更新它。 - Rory Becker

0

文本标记不是着色的好方法,因为它们伴随着大量的开销。您不希望为每个标记定义一个标记。 - Scott Wisniewski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接