是否可以仅更改VS2015 Professional中的lambda运算符颜色?

时间:2016-12-24 08:42:56

标签: c# visual-studio-2015 editor

我想在代码编辑器中更好地控制颜色。例如,我想将lambda运算符的颜色=>更改为与其他运算符不同。我还想如果有可能只更改扩展方法的颜色,同时保留其他方法的默认颜色(反之亦然),并在lambda关键字出现在lambda上下文中时更改它们的颜色。

使用一些简洁的VS扩展(或者甚至是默认的编辑器自定义选项)是否可以实现这一点?

编辑:我创建了这个类,并从答案中复制粘贴方法:

static class StringExtensionMethods
{
    public static List<int> AllIndexesOf ( this string str, string value )
    {
        if ( String.IsNullOrEmpty ( value ) )
            throw new ArgumentException ( "the string to find may not be empty", "value" );
        List<int> indexes = new List<int> ( );
        for ( int index = 0; ; index += value.Length )
        {
            index = str.IndexOf ( value, index );
            if ( index == -1 )
                return indexes;
            indexes.Add ( index );
        }
    }
}

1 个答案:

答案 0 :(得分:2)

自己编写这样的扩展程序非常容易。

首先,创建一个Extensibility - Visual Studio Extension项目。 然后,添加Editor Classifier item。 这会将大量文件放入项目中,您需要一个名为EditorClassfier1.cs(或类似)的文件。

在其中,您将找到GetClassificationSpans方法。 该系统的工作原理是VS将使用MEF并在编辑器中发生变化时不断执行此方法。因此,您只需返回提供相关ClassificationSpan的{​​{1}}个对象列表以及开始和结束位置。

我这么快就把它放在一起:

ClassificationType

结果(注意:背景突出显示是public IList<ClassificationSpan> GetClassificationSpans(SnapshotSpan span) { var result = new List<ClassificationSpan>(); foreach (var line in span.Snapshot.Lines.Where(x => x.GetText().Contains("=>"))) { foreach (var idx in line.GetText().AllIndexesOf("=>")) { result.Add(new ClassificationSpan(new SnapshotSpan(line.Snapshot, new Span(line.Start.Position + idx, 2)), this.classificationType)); } }; return result; } 模板生成的样本,您可以根据需要控制它)。 Screenshot

要实现Editor Classifier,请查看以下答案: Finding ALL positions of a substring in a large string in C#

P.S。从默认设置更改的一个好主意是AllIndexesOf类,默认情况下会IClassifierProvider。可能最好将其更改为[ContentType("text")],因为此语法突出显示只对代码有意义。