Visual Studio:从undo / redo堆栈中排除大纲

时间:2009-11-29 23:12:50

标签: visual-studio ide undo outlining

在Visual Studio中有一些令人讨厌的东西:当我展开或折叠方法或代码区域时,此操作会在撤消堆栈上推送。因此,如果我在方法中编辑某些代码,然后折叠该方法,然后想要撤消我的更改,我必须撤消两次:一次用于崩溃操作,一次用于代码更改。如果您在编辑代码后展开或折叠了几件事情,编辑器会不断跳到不同的地方并且您不知道您的更改是否已被撤消,这可能会非常令人困惑......

所以我的问题是:是否可以禁用该行为?即,在撤消堆栈中只考虑代码的变化吗?

PS:我正在使用Visual Studio 2008


编辑:如果此行为也让您烦恼,请vote to fix it on UserVoice

6 个答案:

答案 0 :(得分:4)

您可以投票通过Visual Studio UserVoice进行修改。

答案 1 :(得分:2)

我不相信有办法禁用此行为。

作为替代方案,撤消和重做工具栏图标具有历史记录下拉列表,允许您直观地查看最近将要撤消或重做的更改的摘要。这有时可以帮助确保您撤消(或重做)您期望的内容。

由于这并不总是足以准确知道更改的内容(撤消历史记录只显示摘要),我偶尔用来解决此问题的解决方案是组合undo(ctrl-z),redo(ctrl-y) ),并再次撤消。第一个撤消移动到发生更改的位置(并撤消更改)。重做将撤消撤消(基本上重复最后一次更改)。并且最后一次撤消将再次执行撤消操作,窗口滚动到我可以实际看到撤消发生的位置,并且可以确认这是否是我期望撤消的更改。它效率不高,但确保代码处于真正期望的状态可能非常有效。

答案 2 :(得分:2)

首先,似乎并非所有概述操作都记录在撤消/重做堆栈中。

  • 切换大纲扩展(CTRL + M / CTRL + M)记录在堆栈中
  • 切换所有大纲(CTRL + M / CTRL + L)记录在堆栈中
  • 折叠到定义(CTRL + M / CTRL + O)未记录在堆栈中

因此,据我所知,无法避免在Visual Studio 2008中的撤消/重做堆栈中记录切换操作。

您可以使用它来启用/禁用每种源类型的大纲。对于C#,可以使用Tools > Options > Text Editor > C# > Advanced复选框在"Enter outlining mode when files open"中启用/禁用大纲。

答案 3 :(得分:2)

我四处寻找,发现Visual Studio中实际上有一个选项可以禁用此行为,但是它似乎并未在用户界面中暴露。但是,您可以以编程方式设置它,并且我测试了它是否可以正常工作,因此(技术上)可行。

选项为:

DefaultTextViewOptions.OutliningUndoOptionId

您将其设置如下:

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

使用此信息,可以编写一个非常简单的Visual Studio扩展来为所有新的ITextView实例切换此设置。

答案 4 :(得分:1)

我可以建议的最佳解决方案是使用CTRL + M禁用轮廓,然后使用CTRL + P.

答案 5 :(得分:0)

我已经创建了Disable Outlining Undo扩展名,该扩展名将扩展和折叠操作从记录到Visual Studio 2017/2019的撤消/重做堆栈中排除了。

感谢里克·斯拉基(Rick Sladkey)!