我在互联网上找不到任何关于 Eclipse 的撤销功能被破坏/垃圾的信息,所以也许这只是我的感觉。不过,我想在这里问一下,看看是否有其他人经历过类似的烦恼和/或知道解决办法。
最常见的情况是我写一行代码,说:
System.out.println(someString);
写完后,someString
我按下回车键,这通常会将我带到行尾/println 参数括号之外。但是,如果我不知何故丢失了参数周围的特殊框突出显示(例如按escape
),则回车键将在结束括号之前给我一个新行。如果我现在用Ctrl-Z
这个撤消,将撤消换行符和整个单词(someString
在本例中)。我现在可以选择重做然后手动删除换行符,或者再次输入行的剩余部分。撤消通常跨越保存,这对我来说没有意义。您可能会认为,当您保存、进行更改然后撤消时,您将不会返回到保存点。然而,事实并非如此。这些小小的不便经常发生,我可能更喜欢一次撤消一个字符,就像 Emacs 风格一样。有人知道这是否可行吗?
不太常见的情况是更不方便的情况,看起来更像是一个实际的错误。有时我会对我的代码进行一些更改。在调试模式下运行它并尝试使用界面(通常在浏览器中)。然后 10-20 分钟后,例如,我在某个地方输入时遇到断点(比如写一封电子邮件),Eclipse 跳起来并窃取焦点,我不小心在代码中输入了一些内容。现在,当我撤消时,Eclipse 通常决定不仅撤消我刚刚所做的更改,而且还撤消我 10-20 分钟(有时甚至更久)前所做的一些更改。这肯定发生在别人身上吧?在我看来,唯一“安全”的做法是最后一次revert
保存,因为您可能不知道您意外更改了什么,撤消会将您带回到上次保存之前,丢失一些随机代码(如果在 Eclipse 窃取焦点时选择了某些内容,意外输入可能还会删除代码)。
所以,这是一篇相当长的长篇大论。我只是想听听其他人是否也遇到过这种情况,是否觉得很沮丧,或者是否有解决办法 :)
答案1
我刚刚创建了一个新的 Java 类:
public class TestUndo {
public static void main(String[] args) {
|
}
}
然后放
System.out.println("Hello world");<enter>
在 的位置|
- 并且没有任何拼写错误或其他错误,按下将按ctrl-z
顺序删除以下内容:
- 首先删除
;
- 然后是括号里的内容
"Hello world"
- 然后
()
- 然后
println
- 然后
.
但选择out
- 然后
System.out
这似乎很合乎逻辑,因为它按语法组分组,我又回到了开始的地方。请注意,这都是在 Eclipse 3.7.1 中;YMMV。
但是,如果我在打字过程中任何时候输入错误System.out.println("Hello world");
或者使用任何光标键或退格键,都会重置撤消状态,稍后当您反复按下时ctrl-z
,您将跳回到每个输入错误 - 因此,不稳定的撤消行为可能是由打字时移动引起的。
Eclipse 错误邮件中列出了一个错误,描述了这种“损坏”的行为: https://bugs.eclipse.org/bugs/show_bug.cgi?id=49553
并建议进行修补;但是,它被标记为“已分配”,但从未进入任何发布版本,那是在 2006 年,因此这种情况不太可能很快改变。
另一种方法ctrl-z
是使用 Eclipse 的“本地历史记录”功能 - 右键单击文件并“比较”->“本地历史记录” - 然后您就可以直观地看到对文件所做的最近更改的差异。
(作为最后的“修复”,你说你希望使用 Eclipse 中的 Emacs kill-ring 功能 -http://www.mulgasoft.com/似乎提供了一些 Eclipse 扩展,使其行为更像 Emacs - 所以你可以尝试一下;就我个人而言,我只使用带有 CEDET 的 Emacs!)