【问题标题】:Visual Studio : exclude outlining from undo/redo stackVisual Studio:从撤消/重做堆栈中排除大纲
【发布时间】:2010-12-21 11:40:54
【问题描述】:

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

所以我的问题是:是否可以禁用该行为?即,撤消堆栈中仅考虑代码中的更改?

PS:我使用的是 Visual Studio 2008


如果这种行为也让您感到厌烦,请vote to fix it on UserVoice

【问题讨论】:

    标签: visual-studio ide undo outlining


    【解决方案1】:

    首先,似乎并不是所有的大纲操作都记录在撤消/重做堆栈中。

    • 在堆栈中记录切换大纲扩展(CTRL+M/CTRL+M)李>
    • Toggle All Outlining (CTRL+M/CTRL+L) 记录在堆栈中李>
    • 折叠到定义 (CTRL+M/CTRL+O) 不会记录在堆栈中

    因此,据我所知,在 Visual Studio 2008 的撤消/重做堆栈中记录切换操作是不可能的。

    您拥有启用/禁用每种来源类型的大纲的唯一选项。对于 C#,可以在 ToolsOptionsText EditorC# 中启用/禁用大纲高级,带有打开文件时进入大纲模式复选框。

    【讨论】:

    • 就像我对 Cedrik 说的,我不想禁用大纲...我喜欢它并想保留它
    • 然后,您将不得不处理撤消/重做。
    【解决方案2】:

    我创建了 Disable Outlining Undo 扩展,它排除了扩展和折叠操作,以便在 Visual Studio 2017/2019 中记录到撤消/重做堆栈。

    感谢 Rick Sladkey 的创意!

    【讨论】:

    • 不错!谢谢谢尔盖,我试试看。
    • 为什么不在 VS 画廊上发布呢?源代码在任何地方都可用吗?
    • 它在画廊里。源代码不可用。
    • 在这里工作得很好。谢谢。
    • 这太棒了。谢谢谢尔盖。在这里下载的人,请在扩展商店中给它评分。
    【解决方案3】:

    我稍微摸索了一下,发现实际上在 Visual Studio 中有一个选项可以禁用此行为,但它似乎并没有在用户界面的任何地方公开。但是,您可以通过编程方式进行设置,并且我测试过它确实有效,因此(技术上)是可行的。

    选项是:

    DefaultTextViewOptions.OutliningUndoOptionId

    然后你这样设置:

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

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

    【讨论】:

    • 非常好,谢谢!我可能会创建这样的扩展;)
    【解决方案4】:

    您可以在Visual Studio UserVoice 投票支持修复它。

    【讨论】:

    • 谢谢,但我知道...我是创建此 UserVoice 条目的人 ;)
    • 不幸的是,微软现在似乎已经删除了 Visual Studio UserVoice。
    【解决方案5】:

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

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

    由于这并不总是足以确切地知道更改是什么(撤消历史记录仅显示摘要),我偶尔用来解决这个问题的解决方案是将撤消(ctrl-z)、重做(ctrl-y ),然后再次撤消。第一个撤消移动到发生更改的位置(并撤消该更改)。重做将撤消撤消(实质上是重复上次所做的更改)。最后一次撤消将再次执行撤消,窗口滚动到我可以实际看到撤消发生的位置,并且可以确认这是否是我期望撤消的更改。这不是很有效,但它可以非常有效地确保代码处于真正预期的状态。

    【讨论】:

    • 确实,我可以使用历史下拉菜单...我不太确定您的快捷键解决方案,但它不是很方便;)
    【解决方案6】:

    我能提出的最佳解决方案是先使用 CTRL+M 禁用大纲,然后使用 CTRL+P。

    【讨论】:

    • 不,这不是一个选项...我真的很喜欢代码大纲功能,我只是不希望它成为撤消堆栈的一部分
    猜你喜欢
    • 2021-06-04
    • 2023-03-10
    • 1970-01-01
    • 2017-03-16
    • 1970-01-01
    • 2012-01-08
    • 2021-03-05
    • 2020-01-02
    • 1970-01-01
    相关资源
    最近更新 更多