在Visual Studio中进行多行查找和替换


83

能做到吗 我们正在使用VS2005,VS2008和VS2010。

我不是说正则表达式-有其位置-而是纯文本查找和替换。我知道我们可以使用\ n标签使用正则表达式来做到这一点,但不希望被正则表达式转义字符弄乱,再加上可读性问题。

如果无法做到,人们会使用什么简单而又简单(免费)的选择?那不涉及敲响我们自己的宏。


3
如果您正考虑使用额外的软件/编写宏来执行此操作,那么请说一下,学习如何使用正则表达式查找/替换。至少它是内置的并且有不错的帮助...
Dave D

3
我知道如何做正则表达式,但是任何带有标点符号的文本都需要大量的正则表达式微调。我
简直

1
投票此MSConnect功能请求,以尝试为此获得内置的解决方案。
马特·福斯

1
这个问题有任何更新吗?从其评论看来,最佳答案似乎并不完全有效。如果有一个好的解决方案,
那就

Answers:


65

我终于找到了

无需下载和加载任何外部宏。

它至少可以在Visual Studio 2008中使用内置宏工作。:)

步骤:
1)选择要查找的文本。
2)按“ Alt + F8”或打开“工具->宏->宏资源管理器”
3)双击“示例->实用程序-> FindLine”。(它将打开“查找”框,其中您的选择已加载到“查找”字段中。不要担心“查找”字段中显示的文本被截断。相信我,该字段具有所有内容。.MS表示方式可能是...: ))
4)单击“查找和替换”对话框上的“快速替换”按钮。输入您的替换文字。
5)然后根据需要单击3个按钮中的任何一个...并完成。:)

Hurray ..它的工作..可能不是直接的方法,但是您知道使用MS ..没有什么是简单易行的.. :)


这不处理“在文件中查找”吧?据我所知,这仅仅是单文件吗?
汤姆·连扎2011年

1
@tlianza在VS2010中,您可以使用屏幕顶部附近的按钮将“快速查找”对话框更改为“在文件中查找”或“在文件中替换”。因此,一旦宏填充了快速查找对话框,就可以切换到另一个视图。
AaronSieb

13
如果您的替换文字也跨越多行,我认为这行不通。当您粘贴到“替换为”框中时,它会被截断。
安德鲁·科凯里

只需将键盘快捷方式链接到此宏,就可以像普通的查找和替换一样简单。非常感谢您的技巧!
塞缪尔

4
宏在以下Visual Studio版本中已经停用,因此不再起作用。
David

23

现在可以在Visual Studio 2012中使用:

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

查看(.*\n)+?零件如何跨多行(非贪婪)进行匹配。
fooPatternToStart是您的开始行上的一些正则表达式模式,而barPatternToEnd您的模式是在下面的另一行上找到的,可能是下面的许多行...

这里找到示例。

简单有效:)

注意:VS2012之前,有效的模式是:fooPatternToStart.(.\n)+@.*barPatternToEnd


1
解释得很好,并且完全按照包装盒上的指示操作。鉴于宏即使在发布时也早已消失,我相信这应该是公认的答案。
nathanchere 2014年

19

您可能想看一下此博客条目:

在Visual Studio中进行多行搜索和替换

提供宏代码以逃避搜索并显示VS查找和替换对话框。


不幸的是,此链接已死。
Cade Roux 2012年

仍然可以从这里工作...如果有帮助,我还将代码复制到了gist:gist.github.com/3706886
罗伯特·亚当斯

一定是暂时的问题。
Cade Roux 2012年

3
此宏已转换为VS扩展,因此现在可以在VS 2012和2013中使用。见helixoft.com/blog/...
彼得Macej

2
@PeterMacej截至今天有一个答案,链接到你的扩展-我已经upvoted -但最好你发布自己的答案,我会接受它-截至2014年你的扩展可能应该是THE接受的回答这个非常流行的问题
hawbsl 2014年

18

您可以通过在“查找和替换”对话框中单击“使用正则表达式”复选框来搜索多行表达式。然后以表示换行\n

在此处输入图片说明


6
如何用多行文字替换?有任何想法吗?
Tauseef

2
如果您的文档中有隐藏的回车符\n\r\n则可能需要更改为。
詹姆斯麦考马克2014年

该问题明确指出不使用正则表达式。正则表达式有一个缺点,即您不仅需要转义换行符,还需要转义所有将成为正则表达式转义符的匹配字符。(为不回答问题而投票)
David Burg'Mar




1

关于Andrew Corkery在2011年8月19日上午9:52的评论:

如果您还想指定多行替换字符串,请编辑宏代码并设置替换文本,如下所示。这样,您只需进行少量修改即可“微调”您的替换产品。

 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

0

Notepad ++的最新版本(截至本文发布)可进行多行查找/替换。我不知道当被问到这是不是真的。但是由于Visual Studio中不再提供宏支持,因此现在很重要。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.