Visual Studio: исключить структуру из стека отмены / повтора

В Visual Studio есть что-то действительно раздражающее: когда я разворачиваю или сворачиваю метод или область кода, это действие помещается в стек отмены. Поэтому, если я редактирую какой-то код в методе, затем свертываю этот метод, а затем хочу отменить свое изменение, мне придется отменить дважды: один раз для действия свертывания и один раз для изменения кода. Это может ОЧЕНЬ сбивать с толку, если вы развернули или свернули несколько вещей после редактирования кода, редактор продолжает прыгать в разные места, и вы не знаете, были ли ваши изменения отменены или нет ...

Итак, мой вопрос: можно ли отключить такое поведение? т.е. что в стеке отмены учитываются только изменения кода?

PS: я использую Visual Studio 2008


Если это поведение вас тоже раздражает, проголосуйте, чтобы исправить это на UserVoice!


person Thomas Levesque    schedule 29.11.2009    source источник


Ответы (6)


Я создал расширение Disable Outlining Undo, которое исключает операции развертывания и свертывания из записи до отмены / redo stack в Visual Studio 2017/2019.

Спасибо Рику Слэдки за идею!

person Sergey Vlasov    schedule 11.03.2019
comment
Хороший! Спасибо Сергей, попробую. - person Thomas Levesque; 11.03.2019
comment
Но почему бы не опубликовать его в галерее VS? Источник где-нибудь доступен? - person Thomas Levesque; 11.03.2019
comment
Он есть в галерее. Исходный код недоступен. - person Sergey Vlasov; 11.03.2019
comment
Здесь отлично поработали. Спасибо. - person Mario Vázquez; 07.06.2019
comment
Это отлично. Спасибо, Сергей. Всем, кто скачал, поставьте, пожалуйста, оценку в магазине расширений. - person John M. Black; 05.11.2019
comment
@ThomasLevesque это сработало? если да, может быть, приму ответ? - person Neuron; 05.09.2020
comment
@Neuron, честно говоря, я совсем забыл об этом и никогда не пробовал. Судя по отзывам в магазине, вроде работает как рекламируется. Установлю сейчас. - person Thomas Levesque; 06.09.2020

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

Возможные варианты:

_1 _

и вы устанавливаете это так:

textView.Options.SetOptionValue(DefaultTextViewOptions.OutliningUndoOptionId, false);

С помощью этой информации можно написать очень простое расширение Visual Studio для переключения этого параметра для всех новых ITextView экземпляров.

person Rick Sladkey    schedule 22.06.2018
comment
Очень мило спасибо! Я мог бы создать такое расширение;) - person Thomas Levesque; 22.06.2018

Вы можете проголосовать за его исправление в Visual Studio UserVoice.

person splintor    schedule 21.10.2013
comment
Спасибо, но я в курсе ... Это я создал эту запись в UserVoice;) - person Thomas Levesque; 21.10.2013
comment
К сожалению, похоже, что Microsoft удалила Visual Studio UserVoice. - person zippy72; 07.07.2020

Я не верю, что есть способ отключить такое поведение.

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

Поскольку этого не всегда достаточно, чтобы точно знать, что это за изменения (история отмены отображает только сводку), решение, которое я иногда использую для решения этой проблемы, состоит в том, чтобы объединить отмену (ctrl-z), повтор (ctrl-y) и отменить снова. Первая отмена перемещается туда, где произошло изменение (и отменяет это изменение). Повтор отменяет отмену (которая по сути повторяет последнее сделанное изменение). И последняя отмена выполнит отмену снова, при этом окно будет прокручено до места, где я действительно могу видеть происходящую отмену и могу подтвердить, было ли это изменение, которое я ожидал отменить. Это не очень эффективно, но может быть очень эффективным, чтобы гарантировать, что код находится в ожидаемом состоянии.

person iammichael    schedule 14.12.2009
comment
Действительно, я мог бы использовать раскрывающиеся списки истории ... Я не уверен в вашем решении с помощью сочетаний клавиш, однако это не очень удобно;) - person Thomas Levesque; 15.12.2009

Лучшее решение, которое я могу предложить, - отключить выделение с помощью CTRL + M, затем CTRL + P.

person Cédric Guillemette    schedule 10.12.2009
comment
Нет, это не вариант ... Мне очень нравится функция выделения кода, я просто не хочу, чтобы она была частью стека отмены - person Thomas Levesque; 10.12.2009

Во-первых, кажется, что не все операции обрисовки записаны в стеке отмены / повтора.

  • Toggle Outlining Expansion (CTRL + M / CTRL + M) записывается в стек
  • Toggle All Outlining (CTRL + M / CTRL + L) записывается в стек
  • Свернуть до определений (CTRL + M / CTRL + O) НЕ записывается в стек

Итак, насколько мне известно, невозможно избежать записи операций Toggle в стеке отмены / повтора в Visual Studio 2008.

Единственный вариант, который у вас есть, это включить / отключить выделение для каждого типа источника. Для C # выделение можно включить / отключить в ИнструментыПараметрыТекстовый редакторC # Дополнительно с флажком Переходить в режим выделения при открытии файлов.

person Laurent Etiemble    schedule 15.12.2009
comment
Как я сказал Седрику, я не хочу отключать выделение ... Мне это нравится, и я хочу его оставить - person Thomas Levesque; 15.12.2009
comment
Затем вам придется иметь дело с отменой / повтором. - person Laurent Etiemble; 16.12.2009