2016-12-24 9 views
0

コードエディタで色をより詳細に制御したいと考えています。たとえば、ラムダ演算子の色を、他の色とは異なるように変更したいとします。他のメソッドをデフォルトの色(またはその逆)にしたままで、拡張メソッドの色を変更することができ、lambdaコンテキストに表示されているときにlambdaキーワードの色を変更することができれば嬉しいです。VS2015 Professionalのラムダオペレータカラーのみを変更できますか?

これは、何かきちんとしたVS拡張機能(またはデフォルトのエディタカスタマイズオプションを使用している場合もあります)で可能ですか?

EDIT:私はこのクラスを作成し、その答えからメソッドを貼り付けコピーします。このような拡張機能を自分で書くことは非常に簡単です

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); 
     } 
    } 
} 
+0

拡張プロジェクトとテストプロジェクトで公開githubプロジェクトを作成すると、ソリューションで協力できるようになります。私は同様の拡張を書くことを望んでいます。 – OzBob

答えて

2

まず、拡張性 - Visual Studio拡張プロジェクトを作成します。 次に、Editor Classifier itemを追加します。 これは、プロジェクトにいくつかのファイルを配置し、EditorClassfier1.cs(またはそれに類するもの)と呼ばれるものが必要です。

これにはGetClassificationSpansメソッドがあります。 このシステムの仕組みは、VSがMEFを使用し、エディタで何か変わるとこのメソッドを絶えず実行することです。したがって、関連するClassificationTypeと開始位置と終了位置を提供するClassificationSpanオブジェクトのリストを返すだけで済みます。

私はそうのように一緒に入れて迅速な事:この中

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; 
    } 

結果(注:あなたが欲しいしかし、背景のハイライトは、Editor Classifierテンプレートがサンプルとして生成するものである、あなたはこれを制御することができます)。 Finding ALL positions of a substring in a large string in C#

P.S.:AllIndexesOfチェックアウト、この答えを実施するための Screenshot

デフォルトから変更することをお勧めします。IClassifierProviderクラスでは、デフォルトで[ContentType("text")]が得られます。この構文ハイライトはコードにのみ意味があるため、[ContentType("code")]に変更することをお勧めします。

+0

ありがとう、私はこの拡張をしようとします。私の最近の試みは非常にイライラしていましたが、私の肩がはるかに野心的でした。 – FinnTheHuman

+0

@FinnTheHumanもし2015年でなければ、私は何かを見ることができます。なぜなら、いくつかの事柄はかなり難しかったからです。 2015年には、このようなシナリオでは拡張性がさらに向上しました。 – zaitsman

+0

列0から行末まで、すべての行が完全にハイライト表示されているため、何か間違っていなければなりません。あなたが私に言ったように、 'ContentType'を' 'code" 'に変更し、同じ結果を得ました。私はあなたのために働くものをコピーして貼り付けました、どうすれば私のために働くことができますか? – FinnTheHuman

関連する問題