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

Had*_*ter 25 macros replace visual-studio

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

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

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

ben*_*ell 44

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

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

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


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

显示如何打开通配符模式的示例

  • 我正在使用VS15并且没有"使用:"复选框.要使其工作,我需要选中"使用正则表达式"复选框,我的通配符需要为**.***而不是*和**[\n]**而不是**\n**. (7认同)
  • 很棒的答案 - 比公认的更好!:) (3认同)
  • 也适用于正则表达式搜索. (2认同)
  • @AnasGhanem 在此处查看 eeScott 的评论。VS15 和 VS17 应该有相同的选项 (2认同)

Hol*_*min 15

使用Visual Studio 2015,这对我有用.打开"搜索"窗口,选中"使用正则表达式"复选标记.填写"找到什么"

.*myCodeHere.*\r?\n
Run Code Online (Sandbox Code Playgroud)

用空字符串填充"替换".

  • 这不会删除该行。这会给您留下一个空行。巨大差距。 (2认同)
  • 是的,这对我来说也是一个展示限制.但它并没有留下空洞...... (2认同)

Dej*_*jan 7

基于@HolgerJeromin 的答案:我更喜欢使用模式匹配行的开头,而不是猜测正确的缩进匹配(可能是制表符,可能是空格,可能更多或更少)^\s*

例如,要删除具有ProducesResponseType属性的所有行,我使用

^\s*\[ProducesResponseType.*\n
Run Code Online (Sandbox Code Playgroud)

(使用 VS 2019 也适用于 Windows)。


gbj*_*anb 6

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

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

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

DTE.ActiveDocument.Selection.SelectLine()
DTE.ActiveDocument.Selection.Delete()
Run Code Online (Sandbox Code Playgroud)

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

DTE.ActiveDocument.Selection.FindText(".BackColor = System.Drawing.Color.Yellow;", vsFindOptions.vsFindOptionsFromStart)
Run Code Online (Sandbox Code Playgroud)