Visual Studio中的多行查找和替换

103

它能完成吗?我们正在使用 VS2005VS2008VS2010

我不是指正则表达式-虽然它们有其用处-而是普通的文本查找和替换。我知道我们可以使用\n 标签来使用正则表达式进行简单替换,但我们不喜欢卷入正则表达式中的转义字符,而且可读性也会受到影响。

如果无法完成,人们正在使用什么简单明了(免费)的替代方案?这不涉及编写自己的宏。


3
如果你考虑使用额外的软件或编写宏来完成操作,我建议你还是拿出勇气学习如何使用正则表达式查找/替换功能。至少这个功能是内置的,而且有不错的帮助文档... - Dave D
3
我知道如何使用正则表达式,但如果文本中有很多标点符号,就需要进行大量的正则表达式微调。我不相信对于简单的查找/替换操作,任何人都喜欢这样做。 - hawbsl
1
请投票支持 此 MSConnect 功能请求,以尝试获取内置解决方案。 - Matt Faus
1
这个问题有任何更新吗?从评论来看,最佳答案似乎并不完全可行。如果有一个好的解决方案那就太棒了... - JoeCool
相关元问题:*Excel VBA的IDE特定问题是否被视为主题?*。特别是,一个答案引用了这个问题。 - Peter Mortensen
据称,自Visual Studio 2012起,宏支持已被取消。 - Peter Mortensen
9个回答

67

我终于找到了它...

没有必要下载和加载任何外部宏。

至少在 Visual Studio 2008 中,使用内置的宏功能是有效的。 :)

步骤:

  1. 选择您要查找的文本。
  2. Alt + F8 或打开“工具 -> 宏 -> 宏资源管理器”。
  3. 双击 示例实用程序FindLine。(它会在“查找”框中打开“查找”框,并将您的选择加载到“查找”字段中。不要担心在“查找”字段中显示的截断文本。相信我,该字段已经包含全部...微软的显示方式可能有点... :))
  4. 在“查找和替换”对话框中单击“快速替换”按钮。输入要替换的文本。
  5. 点击三个按钮中的任何一个,根据您的需求进行操作...就完成了。 :)

好耶...它很有效。这可能不是一种直接的方法,但是您知道微软,没有什么是简单直接的..:)


1
@tlianza在VS2010中,你可以使用位于屏幕顶部附近的按钮将快速查找对话框切换为“在文件中查找”或“替换文件”。因此,一旦宏填充了快速查找对话框,你就可以切换到另一个视图。 - AaronSieb
13
如果您要替换的文本也跨越多行,我认为这种方法不起作用。当您将文本粘贴到“替换为”框中时,它会被截断。 - Andrew Corkery
@Kos 我认为你需要将“查找位置”下拉框的值更改为“当前文档”。 - Juozas Kontvainis
看起来像是多行查找。 - Carl
9
宏在后续的 Visual Studio 版本中已被弃用,因此这种方法不再有效。 - David Burg
显示剩余4条评论

34

这在 Visual Studio 2012 中是可行的:

fooPatternToStart.*(.*\n)+?.*barPatternToEnd

观察这个(.*\n)+?部分如何进行跨多行、非贪婪匹配。
fooPatternToStart是你的起始行上的某个正则表达式模式,而barPatternToEnd是你要在另一行下面找到的模式,可能会有很多行...

示例在此处找到。

简单而有效 :)

注意:VS2012之前,可用的模式为:fooPatternToStart.(.\n)+@.*barPatternToEnd


2
讲解得很清楚,而且完全按照说明书上的操作。考虑到宏在发布时已经过时,我认为这应该是被接受的答案。 - nathanchere
1
这应该是被接受的答案。 - Be Chiller Too
1
据称,自Visual Studio 2012起,宏支持已被取消。 - Peter Mortensen

18

在“查找和替换”对话框中,单击“使用正则表达式”复选框,即可搜索多行表达式。换行符由\n表示。

输入图像说明


7
我们如何用多行文本替换?有什么想法吗? - Tauseef
2
如果您的文档中存在隐藏的回车符,您可能需要将\n更改为\r\n - James McCormack
1
该问题明确说明不使用正则表达式。正则表达式的缺点是不仅需要转义换行符,还需要转义所有可能成为正则表达式转义字符的匹配字符。(因未回答问题而投反对票) - David Burg

13

你能在你的回答中详细说明吗? - Peter Mortensen
略微详细解释一下,但不会太多。 - Peter Mortensen
打开VS 2022, 扩展 -> 管理扩展 -> 在线, 搜索:多行, 安装:“Multiline Search and Replace” by Helixoft, 在以下位置添加新的查找工具:编辑 -> 查找和替换 - undefined

3

此工具仅由微软提供。请查看多行搜索和替换

此工具仅使用正则表达式,但对于不熟悉正则表达式的人来说,使用它会更好。


1
这是我的解决方案,至今仍然适用。 - chakeda
最后一段似乎有矛盾之处。您能澄清一下吗?(但是不要包括“编辑:”,“更新:”或类似的字样 - 答案应该看起来像是今天写的。) - Peter Mortensen

1

截至本篇发布时,Notepad++ 的最新版本支持多行查找/替换。由于 Visual Studio 不再支持宏,因此现在这一功能显得更为重要。


据称,自Visual Studio 2012起,宏支持已被取消。 - Peter Mortensen
迷宫好用VsCode,因为你可以打开文件夹。 - Jeremy Thompson

1

关于Andrew Corkery的评论

如果您想指定一个多行替换字符串,编辑宏代码并按下面所示设置替换文本。 这将允许您通过仅进行必要的小修改来“微调”替换。

Sub FindLine()
    Dim textSelection As TextSelection

    textSelection = DTE.ActiveDocument.Selection
    textSelection.CharLeft(True)
    DTE.ExecuteCommand("Edit.Find")
    DTE.Find.FindWhat = textSelection.Text

    ' Also preset replacement text with current selection
    DTE.Find.ReplaceWith = textSelection.Text
End Sub

但是问题说:“这不涉及到创造我们自己的宏。” - Peter Mortensen
据称,自Visual Studio 2012起,宏支持已被取消。 - Peter Mortensen

1

你也可以使用UltraEdit打开文件,它完全支持多行替换。如果你只想使用一次,可以使用试用版。


0

根据this,这已经过时且不再受支持。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接