Visual Studio宏查找字符串并删除匹配的行

时间:2011-11-02 21:46:55

标签: visual-studio macros replace

在我的Visual Studio(2010 C#)解决方案中,我需要删除包含匹配字符串模式的所有代码行。

例如,我想删除包含“.BackColor = System.Drawing.Color.Yellow;”的所有行。 Visual Studio的“查找和替换”功能不够好,因为您无法告诉它消除匹配的行。

所以我想我需要一个宏。任何帮助表示赞赏。

6 个答案:

答案 0 :(得分:41)

您可以使用Visual Studio的“查找和替换”功能删除匹配的行。

关键是匹配整行,包括行尾字符。您可以在通配符或正则表达式模式下执行此操作。在通配符模式下,使用*开始表达式,并使用*\n结束表达式。星号将匹配任意数量的字符,\n将匹配行尾字符。

在您的情况下,您的查询查询将为“*.BackColor = System.Drawing.Color.Yellow;*\n”。然后应将替换字段留空。


要启用通配符模式,请在“查找和替换”对话框的“查找选项”部分的“使用:”字段中选择“通配符”。

Example showing how to turn on wildcard mode

答案 1 :(得分:13)

使用Visual Studio 2015,这对我有用。打开“搜索”窗口,选中“使用正则表达式”复选标记。用

填写“找到什么”
.*myCodeHere.*\r?\n

用空字符串填充“替换”。

答案 2 :(得分:6)

我倾向于通过运行宏录制器然后编辑生成的代码在VS中创建宏。

因此,手动搜索模式,然后按F3。然后停止宏(或按行开始键,选择行结束,按删除然后停止宏)。

编辑宏,删除行的命令是:

DTE.ActiveDocument.Selection.SelectLine()
DTE.ActiveDocument.Selection.Delete()

您可以使用FindText设置查找文本:

DTE.ActiveDocument.Selection.FindText(".BackColor = System.Drawing.Color.Yellow;", vsFindOptions.vsFindOptionsFromStart)

答案 3 :(得分:2)

对于Visual Studio 2015(其中没有宏且没有通配符),我执行了以下操作:

  • 打开查找和替换(Ctrl + H)
  • 设置为使用正则表达式(Alt + E)
  • 将“查找”框设置为
  

({代码串}})\ r?\ n({next line tabbing})

  • 将“替换”框留空
  • 替换

其中 -

{代码字符串} =您要删除的代码行。请注意,您需要使用反斜杠()

转义括号和引号等字符

{next line tabbing} =下一行代码前面的空格数(如果没有这个,你的行将被删除,但下一行会有一倍的空格

例如,要删除

  

DoSomething的("你好&#34);

从 -

class A
{
    void SomeMethod()
    {
        DoSomething("hello");
        DoSomethingElse();
    }
}

替换以下

  

(DoSomething(\" hello \")\;)\ r?\ n({})

答案 4 :(得分:1)

我正在尝试删除属性(在我的情况下为[OperationContract]),其他答案对我都无效。我终于通过使用以下命令使其工作:

\[OperationContract\]\r\n\t\t(使用正则表达式)

答案 5 :(得分:1)

我不想猜测正确的缩进匹配(可能是制表符,空格可能更多或更少),我更喜欢使用O_ASYNC模式匹配行的开头。

例如,要删除所有具有fcntl(fd, F_SETFL, O_ASYNC);属性的行,我使用

^\s*

(使用VS 2019在Windows上也可以使用)。