2011-02-22 3 views
29

Мне пришлось взять на себя проект C#. Парень, который разработал программное обеспечение, в первую очередь был глубоко влюблен в #region, потому что он завернул все в регионы. Это делает меня почти сумасшедшим, и я искал инструмент или аддон, чтобы удалить все из #region из проекта. Есть что-то вокруг?удаление #области

+0

Есть регионы плохо, или вы говорите о чрезмерном использовании? В предыдущем проекте нас учили настраивать регионы для событий, конструкторов, свойств, общедоступных методов, частных методов, частных переменных для каждого класса. – JonWillis

+8

Я думаю, это вопрос вкуса. Я просто не вижу никакой пользы в их использовании. Для меня это мешает не видеть код или щелкнуть по региону, чтобы открыть его. – gsharp

+5

@JonWillis - В целом я не думаю, что регионы плохи, но у них есть тенденция скрывать нарушения принципа единой ответственности. –

ответ

47

Просто используйте Visual Studio встроенный «Найти и заменить» (или «Заменить в файлах», который можно открыть, нажав Ctrl + сдвиг + H).

Чтобы удалить #region, вам необходимо включить регулярное выражение; в диалоговом окне «Заменить в файлах» установите флажок «Использовать: регулярные выражения». Затем используйте следующий шаблон: «\#region .*\n», заменив совпадения на "" (пустая строка).

Чтобы удалить #endregion, сделайте то же самое, но используйте «\#endregion .*\n» в качестве вашего шаблона. Регулярные выражения могут быть overkill для #endregion, но это не помешает (в случае, если предыдущий разработчик оставлял комментарии на той же строке, что и #endregion или что-то в этом роде).


Примечание: Другие выложили образцы, которые должны работать для вас, как хорошо, они немного отличаются, чем у меня, но вы получите общее представление.

+4

Это сумасшедший разговор. – RQDQ

+0

Yep ... он также имеет ограниченный синтаксис RegEx, если это необходимо. – Oded

+0

Используйте соответствующие [regexp] (http://msdn.microsoft.com/en-us/library/2k3te2cs%28v=VS.100%29.aspx) или [подстановочные знаки] (http://msdn.microsoft.com/ ан-нас/библиотека/afy96z92% 2 = VS.100% 29.aspx). – Vlad

4

В поиске и замене используйте {[#]<region[^]*} для Find what: и замените его на пустую строку. #EndRegion достаточно просто заменить.

+0

Что делает '[^]' in Find & Replace? – Timwi

+0

@Timwi [^ ...] 'Соответствует любому символу, который не находится в наборе символов, следующих за символом ^. Таким образом, в этом случае набор пуст, поэтому соответствует всем в этой строке. –

+0

Тогда почему бы просто не использовать '.'? – Timwi

-2

Вы можете использовать подстановочные поиска/замены:

*\#region * 
*\#endregion 

И заменить никакой ценности. (Обратите внимание, что # необходимо экранировать, так как визуальный stuido использует его для соответствия «любому числу»)

+1

@ downvoters: Как это отличается от принятого ответа? –

+0

Вы начали получать пустые голоса, вероятно, потому, что опция «подстановочные знаки» была удалена в VS2012. VS2010 имел этот вариант - сравните https://msdn.microsoft.com/en-us/library/a40ywt0a(v=vs.100).aspx и https://msdn.microsoft.com/en-us/library/a40ywt0a (v = vs.110) .aspx). Так не честно. – CoperNick

26

Используйте одно регулярное выражение ^[ \t]*\#[ \t]*(region|endregion).*\n, чтобы найти и регион, и область конца. После замены пустой строкой вся строка с ведущими пробелами будет удалена.

[ \t]* - находит ведущие пробелы

\#[ \t]*(region|endregion) - находит #region или #endregion (а также очень редкий случай с пробелами после #)

.*\n - находит все после #region или #endregion (но в такая же строка)

EDIT: ответ изменен, чтобы быть совместимым со старым синтаксисом regex для Visual Studio. Был: ^[ \t]*\#(end)?region.*\n (знаки вопроса не работают на старый синтаксис)

EDIT 2: Добавлен [ \t]* после # обрабатывать очень редкий случай, найденного @Volkirith

+1

Ты, сэр, спасатель! Я должен был наследовать проект, каждый метод был завернут в регион. Каждый метод! – Draco

+1

Я добавил еще один [\ t] * между # и (region) -> он также имеет место, чтобы иметь пробелы, а dev, который я унаследовал от кода, который я должен был очистить, был довольно непоследовательным. Полное выражение, которое я использовал:^[\ t] * \ # [\ t] * (region | endregion). * \ N – Volkirith

+0

Действительно Awsome :) (Y) –

2

Если вы должны сотрудничать с любителями региона (и держать регионы нетронутые), то я бы порекомендовал "I hate #Regions" расширение Visual Studio. Это делает регионы допустимыми - все регионы расширены по умолчанию, а директивы #region отображаются очень маленьким шрифтом.

3

Для всех, кто использует ReSharper, это просто простой Atr-Enter на линии региона. После этого у вас будет возможность удалить регионы в файле, в проекте или в решении.

More info on JetBrains.

+0

awesome! В R # теперь так много интересных функций, что я потерял все возможное. – gsharp

0

Чтобы удалить #region с новой строкой после него, замените следующий с пустой строкой:

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

Чтобы заменить #endregion с ведущей пустой строкой, заменить следующий с пустой строкой:

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