2011-02-22 29 views
29

Tôi phải tiếp quản dự án C#. Người phát triển phần mềm ở nơi đầu tiên đã yêu sâu sắc với #region vì anh ta bọc mọi thứ với các vùng. Nó làm cho tôi gần như điên rồ và tôi đang tìm kiếm một công cụ hoặc addon để loại bỏ tất cả #region từ dự án. Có cái gì xung quanh?xóa #region

+0

Khu vực có phải là điều xấu hay bạn đang nói quá mức sử dụng? Trong một dự án trước, chúng tôi đã được dạy để thiết lập các vùng cho các sự kiện, các nhà xây dựng, các thuộc tính, các phương thức công cộng, các phương thức riêng, các biến riêng cho mỗi lớp. – JonWillis

+8

Tôi đoán đó là vấn đề về hương vị. Tôi không thấy bất kỳ lợi ích nào khi sử dụng chúng. Đối với tôi, điều đáng lo ngại là không nhìn thấy mã hoặc nhấp vào khu vực để mở nó. – gsharp

+5

@JonWillis - Nói chung tôi không nghĩ rằng các khu vực là xấu nhưng họ có xu hướng che giấu các vi phạm Nguyên tắc duy nhất về trách nhiệm. –

Trả lời

47

Chỉ cần sử dụng Visual Studio tích hợp trong "Find and Replace" (hoặc "Thay thế trong Files", bạn có thể mở bằng cách nhấn tổ hợp phím Ctrl + phím Shift +H).

Để xóa #region, bạn cần bật đối sánh cụm từ thông dụng; trong hộp thoại "Thay thế trong tệp", chọn "Sử dụng: Biểu thức chính quy". Sau đó, sử dụng mẫu sau: "\#region .*\n", thay thế các kết quả phù hợp bằng "" (chuỗi rỗng).

Để xóa #endregion, hãy làm tương tự, nhưng sử dụng "\#endregion .*\n" làm mẫu của bạn. Cụm từ thông dụng có thể là quá mức cần thiết cho #endregion, nhưng sẽ không bị tổn thương (trong trường hợp nhà phát triển trước đó để lại nhận xét trên cùng một dòng với tên #endregion hoặc thứ gì đó).


Lưu ý: Những người khác đã đăng các mẫu sẽ hoạt động cho bạn, chúng hơi khác so với tôi nhưng bạn có ý tưởng chung.

+4

Đó là cuộc nói chuyện điên rồ. – RQDQ

+0

Yep ... nó cũng có giới hạn cú pháp RegEx nếu cần. – Oded

+0

Sử dụng [regexp] phù hợp (http://msdn.microsoft.com/en-us/library/2k3te2cs%28v=VS.100%29.aspx) hoặc [ký tự đại diện] (http://msdn.microsoft.com/ en-us/library/afy96z92% 28v = VS.100% 29.aspx). – Vlad

4

Tìm và thay thế sử dụng {[#]<region[^]*} cho Find what: và thay thế bằng chuỗi trống. #EndRegion đủ đơn giản để thay thế.

+0

'[^]' làm gì trong Tìm và Thay thế? – Timwi

+0

@Timwi [^ ...] 'Khớp bất kỳ ký tự nào không nằm trong tập ký tự theo sau ^'. Vì vậy, trong trường hợp này, tập hợp sẽ trống để khớp với mọi thứ trong dòng đó. –

+0

Sau đó, tại sao không chỉ sử dụng '.'? – Timwi

-2

Bạn có thể sử dụng các ký tự đại diện tìm/thay thế:

*\#region * 
*\#endregion 

Và thay thế không có giá trị. (Lưu ý rằng # cần phải được thoát, vì stuido trực quan sử dụng nó để khớp với "bất kỳ số nào")

+1

@downvoters: Điều này khác biệt như thế nào với câu trả lời được chấp nhận? –

+0

Bạn đã bắt đầu nhận được phiếu giảm giá có thể vì tùy chọn "ký tự đại diện" đã bị xóa trong VS2012. VS2010 có tùy chọn này - so sánh https://msdn.microsoft.com/en-us/library/a40ywt0a(v=vs.100).aspx và https://msdn.microsoft.com/en-us/library/a40ywt0a (v = vs.110) .aspx). Thật không công băng. – CoperNick

26

Sử dụng một regex ^[ \t]*\#[ \t]*(region|endregion).*\n để tìm cả hai: vùng và kết thúc. Sau khi thay thế bằng chuỗi rỗng, toàn bộ dòng có khoảng trắng phía trước sẽ bị xóa.

[ \t]* - không gian phát hiện hàng đầu

\#[ \t]*(region|endregion) - tìm thấy #region hoặC#endregion (và cũng có thể trường hợp rất hiếm hoi với các không gian sau khi #)

.*\n - tìm thấy tất cả mọi thứ sau #region hoặC#endregion (nhưng trong cùng một dòng)

EDIT: Trả lời thay đổi để tương thích với cú pháp regex Visual Studio cũ. Là: ^[ \t]*\#(end)?region.*\n (dấu hỏi không làm việc cho cú pháp cũ)

EDIT 2: Thêm [ \t]* sau # để xử lý trường hợp rất hiếm tìm thấy bằng @Volkirith

+1

Bạn thưa bạn, là một người tiết kiệm cuộc sống! Tôi phải kế thừa một dự án là mọi phương pháp đều được bao bọc trong một khu vực. Mỗi phương pháp duy nhất! – Draco

+1

Tôi đã thêm một [\ t] * khác giữa # và (vùng) -> một cách thận trọng cũng có giá trị để có khoảng trống ở đó và dev tôi kế thừa mã mà tôi phải dọn dẹp khá không nhất quán. Biểu thức đầy đủ tôi đã sử dụng:^[\ t] * \ # [\ t] * (vùng | phần cuối). * \ N – Volkirith

+0

Thực sự Awsome :) (Y) –

2

Nếu bạn có hợp tác với những người yêu thích khu vực (và giữ khu vực bị ảnh hưởng), sau đó tôi muốn giới thiệu "I hate #Regions" tiện ích Visual Studio. Nó làm cho các vùng có thể chấp nhận được - tất cả các vùng được mở rộng theo mặc định và chỉ thị #region được hiển thị với phông chữ rất nhỏ.

3

Đối với bất kỳ ai sử dụng ReSharper, nó chỉ đơn giản là Atr-Enter trên dòng khu vực. Sau đó, bạn sẽ có tùy chọn xóa các vùng trong tệp, trong dự án hoặc trong giải pháp.

More info on JetBrains.

+0

tuyệt vời! R # đã có rất nhiều tính năng tuyệt vời mà tôi đã mất dấu vết của tất cả những gì có thể. – gsharp

0

Để loại bỏ #region với một dòng mới sau nó, thay thế sau đây với chuỗi rỗng:

^(?([^\r\n])\s)*\#region\ ([^\r\n])*\r?\n(?([^\r\n])\s)*\r?\n 

Để thay thế #endregion với một dòng trống hàng đầu, thay thế sau đây với một chuỗi rỗng:

^(?([^\r\n])\s)*\r?\n(?([^\r\n])\s)*\#endregion([^\r\n])*\r?\n 
Các vấn đề liên quan