Tìm và thay thế nhiều dòng trong Visual Studio


83

Nó có thể được thực hiện? Chúng tôi đang sử dụng VS2005 và VS2008 và VS2010.

Ý tôi không phải là cụm từ thông dụng - có vị trí của chúng - mà là văn bản cũ thuần túy tìm và thay thế. Tôi biết chúng ta có thể làm điều đó (nhanh chóng) với các biểu thức chính quy bằng cách sử dụng thẻ \ n nhưng không muốn bị rối trong các ký tự thoát regex, ngoài ra còn có vấn đề về khả năng đọc.

Nếu không thể thực hiện được thì mọi người đang sử dụng phương pháp thay thế đơn giản và đơn giản (miễn phí) nào? Điều đó không liên quan đến việc tạo ra macro của chính chúng ta


3
Nếu bạn đang cân nhắc phần mềm bổ sung / viết macro để làm điều đó, tôi muốn nói chỉ cần cắn viên đạn và tìm hiểu cách sử dụng regex find / Replace. Ít nhất nó được xây dựng trong và có sự giúp đỡ đàng hoàng ...
Dave D

3
tôi biết làm thế nào để thực hiện regex nhưng bất kỳ văn bản nào có nhiều dấu câu trong đó sẽ cần rất nhiều tinh chỉnh regex. Tôi không thể tin rằng đó là tách trà của bất kỳ ai cho một thao tác tìm / thay thế đơn giản
hawbsl

1
Bỏ phiếu yêu cầu tính năng MSConnect này để cố gắng nhận được giải pháp tích hợp cho việc này.
Matt Faus,

1
Bất kỳ cập nhật về câu hỏi này? Từ các nhận xét của nó, có vẻ như câu trả lời hàng đầu không hoàn toàn hoạt động. Nó sẽ thật tuyệt nếu có một giải pháp tốt cho điều này ...
JoeCool

Câu trả lời:


65

Cuối cùng tôi đã tìm thấy nó ..

Không cần tải xuống và tải bất kỳ macro bên ngoài nào.

Nó hoạt động trong Visual Studio 2008 với macro tích hợp sẵn ít nhất. :)

Các bước:
1) Chọn văn bản bạn muốn tìm.
2) Nhấn "Alt + F8" hoặc mở "Tools -> Macros -> Macro Explorer"
3) Nhấp đúp vào "Sample -> Utilities -> FindLine". (Nó sẽ mở hộp Tìm với lựa chọn của bạn được tải trong trường "Tìm". Đừng lo lắng về văn bản bị cắt ngắn được hiển thị trong trường "Tìm". Tin tôi đi, trường có tất cả. Cách hiển thị củaMS có thể là ...: ))
4) Nhấp vào nút "Quick Replace" trên hộp thoại "Find And Replace". Nhập thay thế của bạn bằng văn bản.
5) Và Nhấp vào bất kỳ nút nào trong 3 nút theo yêu cầu của bạn ... và nó đã hoàn tất. :)

Hurray .. nó đang hoạt động .. Có thể không phải là một cách dễ dàng để làm điều đó nhưng bạn biết đấy với MS .. không có gì là đơn giản và dễ dàng .. :)


Điều này không xử lý "tìm thấy trong tệp" phải không? Gần như tôi có thể nói, nó chỉ là một tệp duy nhất?
Tom Lianza

1
@tlianza Trong VS2010, bạn có thể thay đổi hộp thoại Tìm nhanh thành Tìm trong Tệp hoặc Thay thế trong Tệp bằng các nút gần đầu màn hình. Vì vậy, khi macro đã điền vào hộp thoại tìm nhanh, bạn có thể chuyển sang dạng xem khác.
AaronSieb

13
Tôi không nghĩ rằng điều này hoạt động nếu văn bản thay thế của bạn cũng kéo dài nhiều dòng. Khi bạn dán vào hộp "Replace With", nó sẽ bị cắt bớt.
Andrew Corkery,

Chỉ cần liên kết một phím tắt với macro này và nó sẽ đơn giản giống như một tìm và thay thế thông thường. Cảm ơn bạn rất nhiều vì thủ thuật này!
Samuel

4
Macro đã được gỡ bỏ trong các phiên bản Visual Studio sau nên điều này không còn hoạt động nữa.
David Burg

23

Điều này ngày nay hoạt động trong Visual Studio 2012:

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

Xem cách (.*\n)+?phần khớp trên nhiều dòng, không tham lam.
fooPatternToStartlà một số mẫu regex trên dòng bắt đầu của bạn, trong khi đó barPatternToEndlà mẫu bạn cần tìm trên một dòng khác bên dưới, có thể nhiều dòng bên dưới ...

Ví dụ được tìm thấy ở đây .

Đơn giản và hiệu quả :)

Lưu ý: trước VS2012, mẫu hoạt động là:fooPatternToStart.(.\n)+@.*barPatternToEnd


1
Được giải thích rõ ràng và hoạt động chính xác như cách ghi trên hộp. Cho rằng macro đã chết từ lâu ngay cả tại thời điểm đăng, tôi tin rằng đây phải là câu trả lời được chấp nhận.
nathanchere

19

Bạn có thể muốn xem mục blog này:

Tìm kiếm và thay thế nhiều dòng trong Visual Studio

Cung cấp mã macro để thoát khỏi tìm kiếm của bạn và hiển thị hộp thoại VS tìm và thay thế.


Thật không may, liên kết này đã chết.
Cade Roux

Vẫn hoạt động từ đây ... Tôi cũng đã sao chép mã vào ý chính tại: gist.github.com/3706886 trong trường hợp hữu ích.
Robert Adams

Chắc hẳn là một vấn đề tạm thời.
Cade Roux

3
Macro này đã được chuyển đổi thành phần mở rộng VS để nó hoạt động trong VS 2012 và 2013 ngay bây giờ. Xem helixoft.com/blog/…
Peter Macej

2
@PeterMacej đến ngày hôm nay có một câu trả lời mà các liên kết đến phần mở rộng của bạn - mà tôi đã bỏ phiếu tán - nhưng lý tưởng bạn gửi câu trả lời của riêng bạn và tôi sẽ chấp nhận nó - như năm 2014 mở rộng của bạn có lẽ nên được THE câu trả lời được chấp nhận cho câu hỏi rất phổ biến này
hawbsl

18

Bạn có thể tìm kiếm các biểu thức nhiều dòng bằng cách nhấp vào hộp kiểm "Sử dụng Biểu thức Chính quy" trong hộp thoại "Tìm và Thay thế". Sau đó ngắt dòng được chỉ định bằng \n.

nhập mô tả hình ảnh ở đây


6
Làm thế nào chúng ta có thể thay thế bằng một văn bản nhiều dòng? bất kỳ ý tưởng?
Tauseef

2
Bạn có thể cần phải thay đổi \nđể \r\nnếu tài liệu của bạn đã ẩn dấu xuống dòng.
James McCormack

Câu hỏi đã nêu rõ ràng là không sử dụng biểu thức chính quy. Biểu thức chính quy có điểm thu hút là không chỉ bạn cần thoát khỏi các ngắt dòng mà bạn còn cần phải thoát tất cả các ký tự đối sánh sẽ là ký tự thoát biểu thức chính quy. (bỏ phiếu xuống vì đã không trả lời câu hỏi)
David Burg



1

Bạn cũng có thể mở các tệp bằng UltraEdit hỗ trợ đầy đủ tính năng thay thế MultiLine. Bạn có thể sử dụng phiên bản dùng thử nếu bạn chỉ có ý định sử dụng một lần.


1

Về nhận xét của Andrew Corkery, ngày 19 tháng 8 '11 lúc 9:52 ở trên:

Nếu bạn cũng muốn chỉ định một chuỗi thay thế nhiều dòng, hãy chỉnh sửa mã macro và đặt văn bản thay thế như được hiển thị bên dưới. Điều này sẽ cho phép bạn "tinh chỉnh" sự thay thế của mình chỉ với những sửa đổi nhỏ cần thiết.

 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

Phiên bản mới nhất (tính đến thời điểm đăng bài này) của Notepad ++ có chức năng tìm / thay thế nhiều dòng. Tôi không biết liệu điều này có đúng trở lại khi điều này được hỏi hay không. Nhưng không còn hỗ trợ macro trong Visual Studio nữa, điều này hiện có liên quan.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.