Czy istnieje tryb Emacsa, który podkreśla różnice w stosunku do zatwierdzonej wersji?

31

Jedną z funkcji Xcode, które moim zdaniem jest całkiem fajne, jest tryb „Porównanie”, który stale pokazuje różnice między bieżącym buforem a ostatnim zatwierdzeniem.

Tryb porównania

Czy jest coś takiego dla Emacsa? Tak naprawdę nie dbam o jednoczesne widoki obok siebie. Samo podkreślenie tła wszelkich zmienionych linii byłoby bardzo pomocne.

Wiem, że zawsze mogę to zrobić C-x v =, ale jest to statyczny widok jednego punktu w czasie i pokazuje tylko różnice. Chcę zobaczyć cały mój plik, edytowalny, z wyróżnionymi różnicami.

Rozpoznać
źródło

Odpowiedzi:

30

Biblioteka diff-hl Dmitrija Gutova zapewnia diff-hl-mode, która daje wyróżnienie frędzli pokazane w górnym oknie na poniższym zrzucie ekranu (z rzeczywistym porównaniem pokazanym w dolnym oknie do porównania):

zrzut ekranu diff-hl

Wykorzystuje ogólną vcfunkcjonalność Emacsa, aby być agnostycznym wobec VCS. Readme mówi: „Testowane z Git, Mercurial, Bazaar i SVN. Może współpracować także z innymi backendami VC”.

Zauważ, że diff-hl-margin-modemożna go zastosować, jeśli używasz terminalowego Emacsa zamiast GUI Emacsa.

Domyślnie diff-hlpodkreśla tylko różnice między zapisanym plikiem a repozytorium; ale diff-hl-flydiff-modeumożliwia również wyróżnienie niezapisanych różnic, abyś mógł zobaczyć zmiany podczas edycji.

Zwróć także uwagę na wbudowane (do standardowych Emacsa) highlight-changes-mode. To tak naprawdę nie rozwiązuje problemu od razu po wyjęciu z pudełka, ale highlight-compare-*funkcje mogą ułatwić rozwiązanie.

phils
źródło
# 33 zostało rozwiązane.
Dmitry
1
Dmitry: Rzeczywiście - próbowałem tego od kilku dni i mogę potwierdzić, że ta funkcja działa bardzo dobrze :)
phils
Miło mi to słyszeć; zostało napisane przez jednego bardzo cierpliwego współpracownika. Dziękujemy za aktualizację odpowiedzi!
Dmitry
10

Nie określasz, jakiego systemu kontroli wersji używasz, ale jeśli jest to git, możesz użyć git-gutter, aby umieścić wskaźnik na marginesach, gdy linia została dodana, usunięta lub zmodyfikowana. Jest dostępny w MELPA przez M-x package-install git-gutter.

erikstokes
źródło
Wygląda to dość blisko tego, co sobie wyobrażałem, ale wydaje się, że aktualizuje rynnę tylko wtedy, gdy bufor jest zapisany. Zastanawiam się, jak trudno byłoby zintegrować się z (lub w inny sposób zachowywać się bardziej) flymake ...
Ken
10

Powinieneś sprawdzić Ediffa . Może wyświetlać różnice i działać jako (3-drożne) narzędzie scalające. Pozwala łatwo cofnąć zmiany, a także uwypukla wyrafinowane różnice, aby pokazać tylko te części przystani, które faktycznie się zmieniły.

zrzut ekranu Ediff

ediff-revision pozwoli ci łatwo porównać z ostatnim zatwierdzeniem lub dowolnymi wcześniejszymi zatwierdzeniami.

Lily Chung
źródło