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

yqkkidmi  于 2022-11-17  发布在  其他
关注(0)|答案(6)|浏览(238)

在我的Visual Studio(2010 C#)解决方案中,我需要删除包含匹配字符串模式的所有代码行。
例如,我想删除所有包含“.BackColor = System.Drawing.Color.Yellow;“。Visual Studio的”查找和替换“功能还不够好,因为您无法让它清除匹配行。
所以我想我需要一个宏来实现这一点。任何帮助都不胜感激。

q3qa4bjr

q3qa4bjr1#

您可以使用Visual Studio的“查找和替换”功能删除匹配行。
关键是要匹配整行,包括行尾字符。您可以在通配符或正则表达式模式下执行此操作。在通配符模式下,表达式以*开始,以*\n结束。星号将匹配任意数量的字符,而\n将匹配行尾字符。
在您的情况下,您的查找查询将是“*.BackColor = System.Drawing.Color.Yellow;*\n“。替换字段应保留为空。
要启用通配符模式,请在“查找和替换”对话框的“查找选项”部分的“用途:”字段中选择“通配符”。

niknxzdl

niknxzdl2#

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

.*myCodeFragmentHere.*\r?\n

用空字符串填充“replace”。
从搜索表达式的代码片段中删除所有regexp(方括号、点)。

8wtpewkr

8wtpewkr3#

我倾向于在VS中创建宏,方法是运行宏记录器,然后编辑生成的代码。
因此,手动搜索图案,然后按F3。然后停止宏(或按行开始键,选择到行尾,按删除,然后停止宏)。
编辑宏时,删除一行的命令是:

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

您可以使用FindText设定寻找文字:

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

inkz8wg94#

基于@HolgerJeromin的回答:与其猜测正确的缩进匹配(可能是制表符,可能是空格,可能更多或更少),我更喜欢使用^\s*模式匹配行的开头。
例如,要删除所有具有ProducesResponseType属性的行,我使用

^\s*\[ProducesResponseType.*\n

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

3wabscal

3wabscal5#

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

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

({代码字符串行})\r?\n({下一行制表符})

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

凡─

{line of code string}=要移除的代码行。请注意,您需要使用反斜杠()转义括号和引号等字符
{下一行制表符}=下一行代码之前的空格数(如果不这样做,您的行将被删除,但下一行之前的空格数将增加一倍

例如,要删除
DoSomething(“你好”);
从-

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

更换以下部件
(做某事(“你好”))\r?\n({ })

ffvjumwh

ffvjumwh6#

我试图删除一个属性(在我的例子中是[OperationContract]),但其他答案都不起作用。
\[OperationContract\]\r\n\t\t(使用正则表达式)

相关问题