Existe um modo Emacs que destaca as diferenças da versão confirmada?

31

Um recurso que o Xcode possui e que acho bastante interessante é o modo "Comparação", que mostra continuamente diferenças entre o buffer atual e o commit mais recente.

Modo de comparação

Existe algo assim para o Emacs? Eu realmente não me importo com as vistas simultâneas lado a lado. Apenas destacar o fundo de todas as linhas que foram alteradas seria uma grande ajuda.

Eu sei que sempre posso fazer C-x v =, mas é uma visão estática de um ponto no tempo e mostra apenas as diferenças. Quero ver meu arquivo inteiro, editável, com as diferenças destacadas.

Ken
fonte

Respostas:

30

A biblioteca diff-hl de Dmitry Gutov fornece diff-hl-mode, o que lhe dá o destaque marginal mostrado na janela superior na seguinte captura de tela (com o diff real exibido na janela inferior para comparação):

captura de tela diff-hl

Ele usa a vcfuncionalidade genérica no Emacs para ser independente do VCS. O leia-me diz "Testado com Git, Mercurial, Bazaar e SVN. Pode funcionar com outros back-end de VC também".

Observe que isso diff-hl-margin-modepode ser empregado se você estiver usando o Emacs do terminal, em vez do Emacs da GUI.

Por padrão, diff-hldestaca apenas as diferenças entre o arquivo salvo e o repositório; mas diff-hl-flydiff-modepermite que as diferenças não salvas sejam destacadas também, para que você possa ver as alterações enquanto edita.

Observe também o built-in (para o padrão Emacs) highlight-changes-mode. Isso realmente não resolve o seu problema imediatamente, mas as highlight-compare-*funções podem facilitar uma solução.

phils
fonte
# 33 foi resolvido.
Dmitry
1
Dmitry: Na verdade - eu realmente tentado-lo ao longo dos últimos dias, e posso confirmar que esse recurso funciona muito bem :)
phils
Fico feliz em ouvir isso; foi escrito por um colaborador muito paciente. Obrigado por atualizar a resposta!
Dmitry
10

Você não especifica qual sistema de controle de versão está usando, mas se for git, você pode usar o git-gutter para colocar um indicador nas margens quando uma linha for adicionada, excluída ou modificada. Está disponível no MELPA via M-x package-install git-gutter.

erikstokes
fonte
Parece muito próximo do que eu estava imaginando, mas parece que apenas atualiza a sarjeta quando o buffer é salvo. Eu me pergunto o quão difícil seria para se integrar com (ou agir mais como) flymake ...
Ken
10

Você deve conferir Ediff . Ele pode exibir diferenças e atuar como uma ferramenta de mesclagem (3 vias). Permite reverter facilmente as alterações e também destaca diferenças refinadas para mostrar apenas as partes de cada pedaço que realmente foram alteradas.

captura de tela do ediff

ediff-revision permitirá comparar facilmente com a confirmação mais recente ou qualquer confirmação anterior.

Lily Chung
fonte