Desfazer no Eclipse quebrado / com bugs?

1

Eu não consegui encontrar nada na internet mencionando que a funcionalidade Desfazer do Eclipse está quebrada / lixo, então talvez seja só eu. No entanto, pensei em perguntar aqui e ver se alguém já passou por uma irritação semelhante e / ou sabe de uma correção.

O cenário mais comum é que eu escrevo uma linha de código, digamos:

System.out.println(someString);

Depois de escrever someString , pressiono enter, o que normalmente me levaria ao final da linha / fora dos argumentos do argumento println. No entanto, se de alguma forma perdi o destaque da caixa especial em torno do argumento (por exemplo, pressionando escape ), em seguida, entrar me dará uma nova linha antes do colchete de fechamento. Se eu desfizer agora com Ctrl-Z , isso desfará a nova linha e a palavra inteira ( someString neste caso). Agora tenho a opção de refazer e, em seguida, excluindo manualmente a nova linha ou digitando o bit restante da linha novamente. Os desfazes geralmente abrangem salvamentos, o que não faz sentido para mim. Você pensaria que, quando você salva, faz uma alteração e, em seguida, desfaz, você não voltará mais longe do que o ponto de salvamento. No entanto, esse não é o caso. Essas pequenas inconveniências acontecem com tanta frequência que eu provavelmente preferiria ter que desfazer um caractere de cada vez, estilo Emacs. Alguém sabe se isso é de alguma forma possível?

O cenário menos comum é aquele que é ainda mais inconveniente e parece mais um bug real. Às vezes faço algumas alterações no meu código. Execute-o no modo de depuração e vá brincar com a interface (normalmente em um navegador). Então, 10-20 minutos depois, por exemplo, eu atingi um ponto de interrupção enquanto estou digitando em algum lugar (digamos, escrevendo um email), o Eclipse salta e rouba o foco e eu acidentalmente digito algo no meu código. Agora, quando desfiz, o Eclipse muitas vezes decide não apenas desfazer a alteração que acabei de fazer, mas também algumas das alterações que fiz de 10 a 20 minutos (às vezes até mais) atrás, tudo de uma vez. Certamente isso deve ter acontecido com outra pessoa? Parece-me que a única coisa "segura" a fazer é revert até o último salvamento, pois você pode não saber exatamente o que mudou acidentalmente, e o desfazer leva você de volta antes do último salvamento, perdendo algum código aleatório ( e a entrada acidental pode ter o código excluído também, se algo foi selecionado quando o Eclipse roubou o foco).

Então, esse foi um discurso bastante longo. Gostaria apenas de saber se alguma coisa já passou por isso, acho frustrante ou até mesmo ter uma solução:)

    
por Svend Hansen 16.10.2012 / 10:44

1 resposta

2

Acabei de criar uma nova classe Java:

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

Em seguida, coloque

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

na posição em que | é - e sem cometer erros de digitação ou outros erros, pressionar ctrl-z remove o seguinte na ordem:

  • remove primeiro o ;
  • então o conteúdo dos colchetes "Hello world"
  • , em seguida, ()
  • , em seguida, println
  • , em seguida, . , mas seleciona out
  • , em seguida, System.out

Isso parece bastante lógico, pois é agrupado por grupos de sintaxe e estou de volta ao ponto de partida. Note que tudo isso está no Eclipse 3.7.1; YMMV.

No entanto, se eu fizer um erro de digitação em qualquer ponto ao digitar System.out.println("Hello world"); ou usar qualquer tecla de cursor ou backspace, isso redefinirá o estado de desfazer e, mais tarde, quando pressionar repetidamente ctrl-z , você retornará a cada erro de digitação - por isso, é possível que o comportamento de desfazer errático seja causado pela movimentação ao digitar.

Existe um erro listado na correspondência de erros do Eclipse que descreve este comportamento "quebrado": link

e um patch foi sugerido; no entanto, ele está marcado como "atribuído", mas nunca foi lançado em nenhuma versão lançada, e isso foi em 2006, então é improvável que isso mude em breve.

Uma alternativa ao uso de ctrl-z é usar o recurso "Local History" do Eclipse - clique com o botão direito no arquivo e "compare com" - > "história local" - então você pode ter uma visão visual das mudanças recentes que você fez no arquivo.

(Como uma "correção" final, você diz que está atrás da funcionalidade kill-ring do Emacs no Eclipse - link parece oferecer algumas extensões do Eclipse para fazê-lo se comportar mais Emacs'y - então você poderia tentar isso, pessoalmente, eu apenas uso o Emacs com o CEDET!)

    
por 22.10.2012 / 16:39

Tags