2012-03-27 5 views
2

나는 3 개의 다른 포럼에서이 질문을했지만 아무도 알아낼 수 없습니다. VS2010에서 매크로를 작성하려고합니다.이 매크로는 일부 코드를 복사합니다. 그래서,이 설정을 제공 : 파일간에 텍스트를 복사하는 VS 매크로를 작성하려면 어떻게해야합니까?

public class foo { 
    //[source1] 
    public overrides string ToString() { 
     return "Hello from Foo" 
    } 
    //[/source1] 
} 

public class bar { 
    //[destination1] 

    //[/destination1] 
} 

이 ... 목적이이()도 ToString을 무시하도록 매크로를 클릭하고 바로 복사 한 코드를 가지고있다. 반 가공 버전이 있습니다

DTE.Find.FindWhat = "(//\[source1\]{(.|\n)*})//\[/source1\])|//\[destination1\]{(.|\n)*}//\[/destination1\]" 
    DTE.Find.Target = vsFindTarget.vsFindTargetSolution 
    DTE.Find.MatchCase = False 
    DTE.Find.MatchInHiddenText = True 
    DTE.Find.PatternSyntax = vsFindPatternSyntax.vsFindPatternSyntaxRegExpr 
    DTE.Find.ResultsLocation = vsFindResultsLocation.vsFindResultsNone 
    DTE.Find.Action = vsFindAction.vsFindActionReplaceAll 

... 클래스가 다른 파일에있는 경우에는 완전히 쓸모가 없습니다. 발견 된 실제 일치를 캡처 할 수 없습니다. 매크로를 사용하여 창 텍스트를 선택할 수 없다는 것을 제외하고는 vsFindResults1에 출력 할 수 있습니다. Ctrl-A-> Ctrl-C를 클릭하여 캡처 할 수 있지만 매크로를 기록하면 아무 것도 표시되지 않습니다 !! 매우 좌절 .... 어떤 아이디어?

답변

0

이러한 종류의 작업을 수행하려면 VirtualPointTextSelection 클래스를 사용할 수 있습니다. 사과 다음과 같은 C#,하지만 VB는 매우 비슷하게 보일 것입니다. 이것은 당신에게 필요한 정확한 답을 줄지는 못하지만 적어도 당신이보아야 할 수업의 일부를 보여줄 것입니다 (TextSelection과 VirtualPoint 수업은 당신이 그들에 대해 알지 못한다면 명백하지 않습니다)

TextSelection sel=ActiveWindow.Selection; 
sel.StartOfDocument(); 

// Use your find options here: 
if (sel.FindText(textToFind, (int)vsFindOptions.vsFindOptionsNone)) { 
    string matchedSourceText=sel.Text; 

    // use your replacement options here. This sets selection to the replacement text 
    if (sel.FindText(textToReplace, (int)vsFindOptions.vsFindOptionsNone)) { 
    sel.Insert(matchedSourceText, (int)EnvDTE.vsInsertFlags.vsInsertFlagsCollapseToEnd); 
} 

여기서는 선택에서 검색 한 텍스트를 캡처하는 방법과 대체 텍스트 위치를 찾고 텍스트를 대체하는 방법을 보여줍니다. 귀하의 경우에해야 할 일은 모두 ProjectItems을 반복하고 텍스트를 matchedSourceText 문자열로 대체하십시오.

+0

아, 그래서 반복 작업을해야 할 것입니다. 나는 이것을 밖으로 시험 할 것이다. – MrEff

+0

맞습니다. 이 작업을 수행하는 데는 몇 가지 방법이 있지만, 내가 기억 하듯이 한 가지 방법은 프로젝트의 ProjectItem을 반복하는 것입니다. –