如何在TextDocument.ReplacePattern中提供多个vsFindOptions?

时间:2013-05-24 08:20:07

标签: c# visual-studio-2012 visual-studio-addins envdte

我希望你们能帮助我变得更聪明。我正在制作一个简单的VS2012 Addin。 Addin是一种更广泛的搜索/替换功能,专门用于我们公司定期执行的任务。我在Visual Studio中添加了一个工具菜单选项,该选项应该打开一个扩展的查找/替换对话框,我可以在其中输入多个查找/替换文本框。最后,我需要包含原始对话框中可用的选项复选框(“匹配大小写”,“匹配整个单词”,“使用正则表达式”)。

问题在于,在ReplaceText或ReplacePattern方法中,它们只允许传递一个可选的int参数,用于提供一个选项的枚举是vsFindOptions,如下所示:

[Guid("A457303F-D058-4415-A2B4-A81B148C7689")]
public enum vsFindOptions
{
    vsFindOptionsNone = 0,
    vsFindOptionsMatchWholeWord = 2,
    vsFindOptionsMatchCase = 4,
    vsFindOptionsRegularExpression = 8,
    vsFindOptionsBackwards = 128,
    vsFindOptionsFromStart = 256,
    vsFindOptionsMatchInHiddenText = 512,
    vsFindOptionsWildcards = 1024,
    vsFindOptionsSearchSubfolders = 4096,
    vsFindOptionsKeepModifiedDocumentsOpen = 8192,
}

我正在浏览MSDN [1]的文档,在那里我可以看到一个例子:

[...].ReplacePattern("test", "done deal", 
    (int)vsFindOptions.vsFindOptionsNone, ref dummy); 

这一切都很好,但我想做的更像是这样:

[...].ReplacePattern(@"<span (.\w.+?>)", string.Empty,
    (int)vsFindOptions.vsFindOptionsRegularExpression, 
    (int)vsFindOptions.vsFindOptionsMatchWholeWord);

考虑原始的查找/替换对话框 - 选项是复选框,这个多选项但是ReplacePattern方法只接受一个int。我可以简单地将这些值一起添加:

(int)vsFindOptions.vsFindOptionsRegularExpression+
(int)vsFindOptions.vsFindOptionsMatchWholeWord ? 

(稍后会尝试这个,但是调试问题atm,addin在vs中不再可用)

1 个答案:

答案 0 :(得分:1)

你应该能够使用按位OR运算符'|',所以

[...].ReplacePattern(@"<span (.\w.+?>)", string.Empty,
    vsFindOptions.vsFindOptionsRegularExpression | 
    vsFindOptions.vsFindOptionsMatchWholeWord);