How to select in Visual Studio an area between 2 known find expression
Some days ago I had to format this huge file to remove everything between a "start" marking and an "end" marking and to do some other nifty things while doing the removing (reformat, copy some of the text, move it somewhere Else and such).
So a simple regexp replace would not work. The only solution was to get a macro to do the work for me so I don't go crazy (or at least not 100%) :)
Since I'm kind of a noob in VB macros I started looking for some samples of how others did this before but after spending like half an hour browsing through tons of VB macros that did everything except what I wanted them to do I decided that it's time for me to write one of my own.
So here is some of it:
DTE.ExecuteCommand("Edit.Find")
DTE.Find.FindWhat = "<the start pattern>"
DTE.Find.Target = vsFindTarget.vsFindTargetCurrentDocument
DTE.Find.MatchCase = False
DTE.Find.MatchWholeWord = False
DTE.Find.Backwards = False
DTE.Find.MatchInHiddenText = True
DTE.Find.PatternSyntax = vsFindPatternSyntax.vsFindPatternSyntaxRegExpr
DTE.Find.Action = vsFindAction.vsFindActionFind
If (DTE.Find.Execute() = vsFindResult.vsFindResultNotFound) Then
Throw New System.Exception("vsFindResultNotFound")
End If
DTE.Windows.Item("{CF2DDC32-8CAD-11D2-9302-005345000000}").Close()
Dim startLine As Integer = DTE.ActiveDocument.Selection.CurrentLine
--- do processing with the start line
DTE.ExecuteCommand("Edit.Find")
DTE.Find.FindWhat = "<the end pattern>"
DTE.Find.Target = vsFindTarget.vsFindTargetCurrentDocument
DTE.Find.MatchCase = False
DTE.Find.MatchWholeWord = False
DTE.Find.Backwards = False
DTE.Find.MatchInHiddenText = True
DTE.Find.PatternSyntax = vsFindPatternSyntax.vsFindPatternSyntaxRegExpr
DTE.Find.Action = vsFindAction.vsFindActionFind
If (DTE.Find.Execute() = vsFindResult.vsFindResultNotFound) Then
Throw New System.Exception("vsFindResultNotFound")
End If
Dim endLine As Integer = DTE.ActiveDocument.Selection.CurrentLine
--- now you have both the start line and the end line
--- and here's your selection to play with
Dim sel As TextSelection = DTE.ActiveDocument.Selection
Please let me know if you have any trouble using this.
Thanks,
Ionutz