Подтвердить что ты не робот

Инвертировать направление назначения в Visual Studio

У меня есть набор операций присваивания в Visual Studio, и я хочу изменить их: то есть

i = j;
would become
j = i;

то есть. заменяя все до равных с тем, что после равных, и наоборот

Есть ли простой способ сделать это, сказать что-то в движке регулярных выражений?

Приветствия, Эд

4b9b3361

Ответ 1

Выберите строки, которые вы хотите поменять, Ctrl + H, затем замените:

{:i}:b*=:b*{:i};

с:

\2 = \1;

с "Look in:" установите "Selection"

Это относится только к идентификаторам стиля C/С++ (через ": i" ). Замените это следующим образом:

{.*}:b*=:b*{.*};

заменить что-либо по обе стороны от "=".

Кроме того, поскольку вы упомянули в комментарии, вы используете ReSharper, вы можете просто выделить "=", "Alt + Enter" и "Reverse assign".

Ответ 2

Просто небольшое улучшение ответа Криса...

Ctrl + H, затем замените:

{:b*}{[^:b]*}:b*=:b*{[^:b]*}:b*;

с:

\1\3 = \2;

(лучшая обработка пробелов, особенно в начале строки)

EDIT:  Для Visual Studio 2012 и выше (я пробовал это в 2015 году): Заменить

(\s*)([^\s]+)\s*=\s*([^\s]+)\s*;

с:

$1$3 = $2;

Ответ 3

К сожалению, у меня нет Visual Studio, поэтому я не могу попробовать в целевой среде, но если он использует стандартные регулярные выражения, вы, вероятно, можете сделать это следующим образом: Найдите "(:Al) = (:Al);" и замените на "\2 = \1". (\ 1 и \2 являются ссылками на первую и вторую группы захвата, в этом случае скобки вокруг \w: s)

ИЗМЕНИТЬ
Ок, не \w... Но согласно MSDN, мы можем вместо этого использовать: Al. Отредактировано выше, чтобы использовать это вместо.
Кроме того, со страницы MSDN я собираюсь, что она должна работать, поскольку ссылки, похоже, работают как обычно.

Ответ 4

Прочный способ сделать это - использовать инструмент рефакторинга. Они знают синтаксис языка, поэтому они понимают концепцию "оператора присваивания" и могут правильно выбирать все выражение с обеих сторон оператора присваивания, а не ограничиваться одним идентификатором, и это то, что я думаю, что все регулярные выражения пока что охватили. Инструменты рефакторинга обрабатывают ваш код как структурированный код, а не только текст. Я нашел упоминание двух надстроек Visual Studio, которые могут это сделать:

(Инвертирование назначения не является технически рефакторингом, так как оно изменяет поведение программы, но большинство инструментов рефакторинга расширяют значение, чтобы включить другие общие модификации кода, подобные этому.)

Ответ 6

Я немного улучшил выражение.

Заменить

(\t+)(\s*)(\S*) = (\S*);

с

$1$2$4 = $3;

Причина в том, что он будет искать строки, начинающиеся с tab (\ t). Он пропустит строки, начинающиеся с определения. Например:.

        TestClass tc = new TestClass();
        int a = 75;
        int b = 76;
        int c = 77;

        a = tc.a;
        b = tc.b;
        a = tc.c;

Будет игнорировать int a, int b и int c и заменять только присваивания.

Ответ 7

как насчет замены всех (CTRL-H)

вы можете заменить, например, "i = j;" по "j = i;"

вы можете использовать регулярные выражения в этом диалоговом окне. Я не уверен, как вы должны всплывать о них. В этом диалоговом окне нажмите F1, затем найдите эту страницу для получения дополнительной информации о регулярных выражениях.

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

Ответ 8

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

Ответ 9

В Visual Studio 2015+ после выбора блока кода нажмите Ctrl + H:

Найти: (\w+.\w+) = (\w+);

Заменить: $2 = $1;

Например:

entity.CreateDate = CreateDate;

изменяется на:

CreateDate = entity.CreateDate;