Apakah ada mode Emacs yang menyoroti perbedaan dari versi yang dikomit?

31

Salah satu fitur yang dimiliki Xcode yang menurut saya cukup rapi adalah mode "Perbandingan", yang terus-menerus menunjukkan perbedaan antara buffer saat ini dan komit terbaru.

Mode perbandingan

Apakah ada yang seperti ini untuk Emacs? Saya tidak terlalu peduli dengan tampilan simultan secara berdampingan. Hanya menyoroti latar belakang dari setiap baris yang diubah akan sangat membantu.

Saya tahu saya selalu bisa melakukannya C-x v =, tetapi ini adalah tampilan statis dari satu titik waktu, dan hanya menunjukkan perbedaan. Saya ingin melihat seluruh file saya, dapat diedit, dengan diffs yang disorot.

Ken
sumber

Jawaban:

30

Pustaka diff-hl Dmitry Gutov menyediakan diff-hl-mode, yang memberi Anda sorotan pinggiran yang diperlihatkan di jendela atas dalam tangkapan layar berikut (dengan perbedaan yang sebenarnya ditampilkan di jendela bawah untuk perbandingan):

tangkapan layar diff-hl

Ia menggunakan vcfungsionalitas generik di Emacs agar menjadi VCS-agnostik. Readme itu mengatakan "Diuji dengan Git, Mercurial, Bazaar dan SVN. Dapat bekerja dengan backend VC lainnya juga."

Catatan yang diff-hl-margin-modedapat digunakan jika Anda menggunakan terminal Emacs daripada GUI Emacs.

Secara default diff-hlhanya menyoroti perbedaan antara file yang disimpan dan repositori; tetapi diff-hl-flydiff-modememungkinkan perbedaan yang tidak disimpan untuk disorot juga, sehingga Anda dapat melihat perubahan saat Anda mengedit.

Perhatikan juga bawaan (ke Emacs standar) highlight-changes-mode. Itu tidak benar-benar mengatasi masalah Anda di luar kotak, tetapi highlight-compare-*fungsinya mungkin memfasilitasi solusi.

phils
sumber
# 33 telah dipecahkan.
Dmitry
1
Dmitry: Memang - Saya benar-benar telah mencobanya selama beberapa hari terakhir, dan saya dapat mengonfirmasi bahwa fitur ini bekerja dengan sangat baik :)
phils
Saya senang mendengarnya; ditulis oleh seorang kontributor yang sangat sabar. Terima kasih telah memperbarui jawabannya!
Dmitry
10

Anda tidak menentukan sistem kontrol versi apa yang Anda gunakan, tetapi jika git, Anda dapat menggunakan git-talang untuk meletakkan indikator di margin ketika garis telah ditambahkan, dihapus atau dimodifikasi. Ini tersedia dalam MELPA via M-x package-install git-gutter.

erikstokes
sumber
Ini terlihat cukup dekat dengan apa yang saya bayangkan, tetapi sepertinya itu hanya memperbarui selokan ketika buffer disimpan. Saya ingin tahu seberapa sulit untuk mengintegrasikan dengan (atau bertindak lebih suka) flymake ...
Ken
10

Anda harus memeriksa Ediff . Ia dapat menampilkan diffs dan bertindak sebagai alat penggabung (3 arah). Ini memungkinkan Anda dengan mudah mengembalikan perubahan, dan juga menyoroti perbedaan yang disempurnakan untuk menunjukkan kepada Anda hanya bagian dari setiap bingkah yang benar-benar berubah.

tangkapan layar ediff

ediff-revision akan memungkinkan Anda membandingkan dengan komit terbaru, atau komitmen sebelumnya.

Lily Chung
sumber