Макрос Visual Studio для поиска строки и удаления совпадающих строк - PullRequest
24 голосов
/ 03 ноября 2011

В моем решении Visual Studio (2010 C #) мне нужно удалить все строки кода, содержащие соответствующий шаблон строки.

Например, я хочу удалить все строки, содержащие ".BackColor = System.Drawing.Color.Yellow;". Функция поиска и замены в Visual Studio недостаточно хороша, потому что вы не можете сказать ей, чтобы стереть совпадающие строки.

Так что я думаю, что мне понадобится макрос для этого. Любая помощь приветствуется.

Ответы [ 5 ]

42 голосов
/ 07 марта 2014

Вы можете использовать функцию «Найти и заменить» Visual Studio для удаления совпадающих строк.

Ключ должен соответствовать всей строке, включая символ конца строки.Вы можете сделать это в режиме подстановочных знаков или в режиме регулярных выражений.В режиме подстановки начинайте выражение с * и заканчивайте выражение *\n.Звездочки будут соответствовать любому количеству символов, а \n будет соответствовать символу конца строки.

В вашем случае ваш запрос поиска будет "*.BackColor = System.Drawing.Color.Yellow;*\n".Поле замены затем следует оставить пустым.


Чтобы включить режим подстановочных знаков, выберите «Подстановочные знаки» в поле «Использование:» раздела «Параметры поиска» диалогового окна «Найти и заменить».

Example showing how to turn on wildcard mode

13 голосов
/ 26 октября 2017

С Visual Studio 2015 это сработало для меня. Откройте окно поиска, установите флажок «использовать регулярные выражения». Заполните "найти что" с

.*myCodeHere.*\r?\n

заполните "replace" пустой строкой.

6 голосов
/ 12 января 2012

Я склонен создавать макросы в VS, запуская рекордер макросов, затем редактируя полученный код.

Итак, вручную найдите шаблон и нажмите F3. Затем остановите макрос (или нажмите клавишу начала строки, выберите конец строки, нажмите «Удалить» и затем остановите макрос).

Редактировать макрос, команда для удаления строки:

DTE.ActiveDocument.Selection.SelectLine()
DTE.ActiveDocument.Selection.Delete()

Вы можете установить текст поиска с помощью FindText:

DTE.ActiveDocument.Selection.FindText(".BackColor = System.Drawing.Color.Yellow;", vsFindOptions.vsFindOptionsFromStart)
2 голосов
/ 26 октября 2016

Для Visual Studio 2015 (в которой нет макросов и подстановочных знаков) я сделал следующее:

  • Открыть Найти и заменить (Ctrl + H)
  • Установить использование регулярных выражений (Alt + E)
  • Установить поле поиска на

({строка строки кода}) \ r? \ N({табуляция следующей строки})

  • Оставьте поле Replace пустым
  • Replace

Where-

{строка строки кода} = строка кода, которую вы хотите удалить.Обратите внимание, что вам нужно экранировать такие символы, как скобки и кавычки с обратной косой чертой ()

{табуляция следующей строки} = количество пробелов, предшествующих следующей строке кода (без этой строки)будет удален, но следующая строка будет иметь двойные пробелы перед ней

Например, чтобы удалить

DoSomething ("hello");

С -

class A
{
    void SomeMethod()
    {
        DoSomething("hello");
        DoSomethingElse();
    }
}

Заменить следующее

(DoSomething (\ "hello \") \;) \ r? \ N ({})

1 голос
/ 04 февраля 2019

Я пытался удалить атрибут ([OperationContract] в моем случае), и ни один из других ответов не помог мне.Я наконец заставил его работать, используя следующее:

\[OperationContract\]\r\n\t\t (Используйте регулярные выражения)

...