Esiste una modalità Emacs che evidenzia differenze rispetto alla versione impegnata?


31

Una caratteristica di Xcode che ritengo piuttosto ordinata è la modalità "Confronto", che mostra continuamente le differenze tra il buffer corrente e il commit più recente.

Modalità di confronto

C'è qualcosa del genere per Emacs? Non mi interessa davvero le viste affiancate simultanee. Evidenziare semplicemente lo sfondo di tutte le linee modificate sarebbe di grande aiuto.

So che posso sempre fare C-x v =, ma è una vista statica di un punto nel tempo e mostra solo le differenze. Voglio vedere il mio intero file, modificabile, con le differenze evidenziate.

Risposte:


30

La libreria diff-hl di Dmitry Gutov fornisce diff-hl-mode, che ti dà l'evidenziazione della frangia mostrata nella finestra in alto nella seguente schermata (con la differenza effettiva visualizzata nella finestra in basso per il confronto):

screenshot di diff-hl

Usa la vcfunzionalità generica in Emacs per essere VCS-agnostico. Il readme dice "Testato con Git, Mercurial, Bazaar e SVN. Può funzionare anche con altri backend VC."

Si noti che diff-hl-margin-modepuò essere impiegato se si utilizza il terminale Emacs anziché GUI Emacs.

Per impostazione predefinita, diff-hlevidenzia solo le differenze tra il file salvato e il repository; ma diff-hl-flydiff-modeconsente di evidenziare anche le differenze non salvate, in modo da poter vedere le modifiche durante la modifica.

Nota anche il built-in (secondo gli standard Emacs) highlight-changes-mode. Ciò non risolve il problema immediatamente, ma le highlight-compare-*funzioni potrebbero facilitare una soluzione.


# 33 è stato risolto.
Dmitry,

1
Dmitry: In effetti - lo sto provando da qualche giorno e posso confermare che questa funzionalità funziona molto bene :)
phils

Sono contento di sentirlo; è stato scritto da un collaboratore molto paziente. Grazie per aver aggiornato la risposta!
Dmitry,

10

Non specifichi quale sistema di controllo versione stai usando, ma se è git, puoi usare git-gutter per mettere un indicatore ai margini quando una linea è stata aggiunta, cancellata o modificata. È disponibile in MELPA tramite M-x package-install git-gutter.


Questo sembra abbastanza vicino a quello che stavo immaginando, ma sembra che aggiorni la grondaia solo quando il buffer viene salvato. Mi chiedo quanto sarebbe difficile integrarsi con (o altrimenti agire più come) un flymake ...
Ken,

10

Dovresti dare un'occhiata a Ediff . Può sia visualizzare le differenze sia agire come uno strumento di unione (a 3 vie). Ti consente di ripristinare facilmente le modifiche e evidenzia anche differenze raffinate per mostrarti solo le parti di ciascun pezzo effettivamente cambiate.

screenshot di ediff

ediff-revision ti consentirà di confrontare facilmente il commit più recente o qualsiasi commit precedente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.