1

Я не смог найти в интернете ничего, что упоминало бы, что функциональность отмены Eclipse была сломана / хлам, так что, возможно, это только я. Тем не менее, я решил спросить здесь и посмотреть, испытал ли кто-нибудь еще подобное раздражение и / или знает ли о чем-то.

Наиболее распространенным сценарием является то, что я пишу строку кода, скажем:

System.out.println(someString);

После записи someString я нажимаю клавишу ввода, что обычно приводит меня к концу строки / за пределами скобок аргумента println. Тем не менее, если я каким-то образом потерял выделение в специальном поле вокруг аргумента (например, нажатием клавиши escape), то ввод даст мне новую строку перед закрывающей скобкой. Если я теперь отменю с Ctrl-Z это отменит новую строку и все слово (someString в этом случае). Теперь у меня есть возможность повторить, а затем вручную удалить новую строку или снова ввести оставшийся бит строки. Отмена часто охватывает сохранения, что не имеет смысла для меня. Вы можете подумать, что когда вы сохраняете, вносите изменения, а затем отменяете, вы возвращаетесь не дальше точки сохранения. Однако это не так. Эти незначительные неудобства случаются так часто, что я, вероятно, предпочел бы отменять по одному персонажу за раз, в стиле Emacs. Кто-нибудь знает, возможно ли это?

Менее распространенный сценарий - это сценарий, который еще более неудобен и больше похож на настоящую ошибку. Иногда я делаю некоторые изменения в своем коде. Запустите его в режиме отладки и начните играть с интерфейсом (обычно в браузере). Через 10-20 минут, например, я достигаю точки останова, когда я где-то печатаю (скажем, пишу электронное письмо), Eclipse подпрыгивает и крадет фокус, и я случайно что-то набираю в своем коде. Теперь, когда я отменяю, Eclipse часто решает не просто отменить изменение, которое я только что сделал, но также и некоторые изменения, которые я сделал 10-20 минут (иногда даже дольше) назад, все за один раз. Конечно, это должно было случиться с кем-то еще? Мне кажется, что единственная "безопасная" вещь, которую нужно сделать, - revert к последнему сохранению, так как вы можете не знать точно, что вы случайно изменили, и отмена забирает вас до последнего сохранения, теряя некоторый случайный код (и случайная запись могла также удалить код, если что-то было выбрано, когда Eclipse украл фокус).

Итак, это была довольно длинная напыщенная речь. Я просто хотел бы услышать, испытал ли это что-то еще, расстраивает ли это или даже имеет решение :)

1 ответ1

2

Я только что создал новый класс Java:

public class TestUndo {
    public static void main(String[] args) {
        |
    }
}

Затем положить

System.out.println("Hello world");<enter>

в положении, где | is - и без ошибок или опечаток нажатие ctrl-z удаляет следующее по порядку:

  • удаляет сначала the ;
  • тогда содержимое скобок "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 является использование функции "Local History" в Eclipse - щелкните правой кнопкой мыши по файлу и "сравните с" -> "local history" - тогда вы сможете получить визуальный отчет о последних изменениях, которые вы внесли в файл.

(В качестве окончательного "исправления" вы говорите, что после Emacs в Eclipse вы используете функцию kill-ring - кажется, что http://www.mulgasoft.com/ предлагает некоторые расширения Eclipse для того, чтобы заставить его работать более Emacs'y, - так что вы может попробовать, лично я просто использую Emacs с CEDET!)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .