- Delta adalah alat yang menambahkan penyorotan sintaks dan fungsi penampil halaman pada output Git, diff, dan grep, membantu membaca diff dengan lebih efisien dan lebih enak dilihat
- Di sebagian besar package manager, nama paketnya adalah git-delta, tetapi executable-nya adalah
delta; dapat digunakan sebagai Git pager dengan mengatur core.pager = delta di ~/.gitconfig
- Fitur utamanya meliputi tema penyorotan sintaks yang sama dengan bat, penyorotan diff per kata berbasis inferensi edit Levenshtein, tampilan perbandingan berdampingan, nomor baris, navigasi
n/N, dan peningkatan tampilan konflik merge
- Output
git blame, rg, git grep, dan grep juga diberi penyorotan sintaks; dengan --hyperlinks, hash commit dapat dibuat dalam format tautan penyedia hosting seperti GitHub, GitLab, SourceHut, dan Codeberg
- Output dapat dipertahankan tetap mirip dengan output Git/diff standar atau tata letak dan gayanya dapat diubah secara besar-besaran, sehingga lingkungan peninjauan diff bisa disesuaikan secara rinci di dalam terminal
Apa yang dilakukan Delta
- Delta adalah penampil halaman dengan penyorotan sintaks untuk output Git, diff, dan grep
- Tujuannya adalah membuat waktu membaca diff menjadi lebih efisien dan menyenangkan di lingkungan tempat kode terus berubah
- Tata letak dan gaya diff dapat diubah secara luas, dan jika diinginkan juga bisa dipertahankan sangat dekat dengan output Git/diff standar
Instalasi dan konfigurasi dasar
- Dokumentasi instalasi tersedia di Install it
- Di sebagian besar package manager, nama paketnya adalah git-delta, dan nama executable-nya adalah
delta
- Tambahkan konfigurasi berikut ke
~/.gitconfig untuk menggunakannya sebagai Git pager dan filter diff interaktif
[core]
pager = delta
[interactive]
diffFilter = delta --color-only
[delta]
navigate = true # use n and N to move between diff sections
dark = true # or light = true, or omit for auto-detection
[merge]
conflictStyle = zdiff3
- Konfigurasi yang sama juga dapat diterapkan dengan perintah
git config --global
git config --global core.pager delta
git config --global interactive.diffFilter 'delta --color-only'
git config --global delta.navigate true
git config --global delta.dark true # or `delta.light true`, or omit for auto-detection
git config --global merge.conflictStyle zdiff3
- Bantuan dapat dilihat dengan
delta -h, manual lengkap dengan delta --help, dan dokumentasi online di user manual
Fitur membaca diff
- Penyorotan sintaks menggunakan tema penyorotan sintaks yang sama dengan bat
- Penyorotan diff per kata menggunakan algoritme inferensi edit Levenshtein
- Mendukung tampilan perbandingan berdampingan dan pembungkusan baris
- Mendukung tampilan nomor baris
- Dapat berpindah antarfile dalam diff besar, atau antardiff pada tampilan
log -p, dengan tombol n dan N
- Fitur ini diaktifkan dengan
--navigate
- Output unified diff tradisional juga diproses bersama output Git
- Dapat mendeteksi latar terminal terang/gelap secara otomatis
Cara tampilan dan tema
- Tema penyorotan sintaks: semua tema yang disediakan bat juga dapat digunakan di Delta
delta --show-syntax-themes --dark
delta --show-syntax-themes --light
- Tampilan perbandingan berdampingan didokumentasikan di Side-by-side view user manual
[delta]
side-by-side = true
- Secara default, tampilan perbandingan berdampingan mengaktifkan nomor baris, dan penyorotan sintaks diterapkan pada panel kiri maupun kanan
- Tampilan perbandingan berdampingan membungkus baris panjang secara otomatis
- Fitur nomor baris didokumentasikan di Line numbers user manual
[delta]
line-numbers = true
Dukungan per operasi Git
- Tampilan konflik merge disediakan dalam format yang ditingkatkan, dengan dokumentasi terkait di Merge conflicts user manual
- Output git blame mendukung penyorotan sintaks, dan saat menggunakan
--hyperlinks, commit dapat dibuat dalam format tautan penyedia hosting
- Penyedia hosting yang didukung: GitHub, GitLab, SourceHut, Codeberg
- Dokumentasi terkait: Git blame user manual
- Output grep seperti
rg, git grep, dan grep juga diberi penyorotan sintaks
- Mendukung fitur
--color-moved milik Git
Styling dan mode kompatibilitas
- Kode dapat langsung disalin dari diff, dan marker
-/+ dihapus secara default
- Menyediakan mode emulasi
diff-highlight dan diff-so-fancy
- Hash commit dapat ditautkan ke halaman penyedia hosting dalam format hyperlinks terminal
- Path file juga dapat dibuat dalam format hyperlink yang bisa dibuka di sistem operasi
- Dekorasi kotak/garis yang menarik perhatian ke bagian header commit, file, dan hunk dapat di-styling
- Mendukung string gaya yang mencakup warna foreground, warna background, dan atribut font untuk lebih dari 20 elemen styling
- Bahasa styling menggunakan bahasa warna/gaya yang sama seperti Git
1 komentar
Komentar Hacker News
Delta adalah alat yang cukup disetel sekali lalu dilupakan, dan sudah cukup lama saya tidak melihat output
git grep/diff/blameyang “mentah”Saya juga selalu memakainya untuk diff biasa di luar repositori Git, dan hari ini baru tahu bahwa alat ini juga bisa dipakai bersama
ripgrephttps://dandavison.github.io/delta/grep.html
bat yang sudah disebutkan juga sama-sama alat yang disetel sekali lalu dilupakan, jadi saya membuat alias
catkebat, dan menyisihkan/usr/bin/cat, “cat asli”, dengan aliasvcathttps://github.com/sharkdp/bat
\catAda pengamatan bagus yang pernah saya baca dulu dan terus teringat: syntax highlighting saat ini menyorot hal yang salah
Manusia sudah cukup baik membedakan sintaks, jadi yang seharusnya disorot bukan sintaksnya, melainkan simbol. Jika setiap nama variabel dan nama fungsi yang berbeda diberi warna berbeda, tujuannya bukan “ini adalah simbol”, melainkan “membedakan simbol yang berbeda dengan lebih cepat”
Namun karena itu jauh lebih sulit daripada menghias sintaks, alat-alat tampaknya tetap berada di sisi yang mudah, bukan sisi yang lebih berguna. Syntax highlighting memang cukup membantu, tetapi saya ingin melihat apakah mesin pencocokan simbol benar-benar bekerja dengan baik
Saya tidak ingat di mana membaca tulisan aslinya, jadi tidak bisa mencantumkan sumber dengan benar
Saat mencari, saya menemukan artikel ini: https://www.wilfred.me.uk/blog/2014/09/27/the-definitive-gui...
Sepertinya sudah ada lebih awal dari itu, tetapi tulisan penjelasan paling awal yang bisa saya temukan adalah artikel tahun 2009: https://zwabel.wordpress.com/2009/01/08/c-ide-evolution-from...
https://difftastic.wilfred.me.uk/
https://github.com/Wilfred/difftastic
Secara pribadi saya memakai color-identifiers-mode di Emacs
https://github.com/ankurdave/color-identifiers-mode
Saya tidak sepenuhnya terbujuk oleh logika itu, tetapi agak penasaran
Kadang saya menyorot variabel secara manual untuk menelusurinya dan memastikan tidak ada penggunaan yang terlewat; untuk kegunaan itu saya cukup paham. Namun saya tidak tahu apakah warna dan kontrasnya cukup untuk menelusuri beberapa variabel sekaligus, dan layar juga bisa jadi berantakan
Sebagai kompromi, mungkin bisa dengan mewarnai secara manual maksimal sekitar 3 variabel saja. Namun jika bantuan seperti itu diperlukan, itu mungkin sejak awal merupakan tanda bahwa keterbacaan kodenya rendah. Tentu saja membantu menangani codebase yang berantakan adalah penggunaan yang sah
Tidak mewah, tetapi jika yang dibutuhkan adalah diff per kata yang lumayan bagus hanya dengan
gitstandar, ini sering kali sudah cukupgit diff --color-words --word-diff-regex='\w+|.'.gitconfig?Delta menjalankan tugasnya dengan sangat baik, tetapi saya terus tersandung masalah baris panjang yang dipotong
Setelah melihat tulisan ini, saya mengecek apakah situasinya sudah berubah, dan ternyata memang sudah. Sekarang jika mengatur
git config --global --replace-all delta.max-line-length 0, baris tidak lagi dipotongSaya tidak begitu paham mengapa ini bukan nilai default. Diskusi perubahannya ada di https://github.com/dandavison/delta/pull/290
Karena menyorot sintaks pada baris yang sangat panjang, misalnya file
.jsyang sudah diminify, bisa menjadi sangat lambat jika tidak dipotongMumpung membahas diff, hal yang menyebalkan dari output diff Git adalah jalur file ditampilkan dengan dimulai oleh dua nama file seperti diff Unix tradisional
--- a/some/path/to/file.c+++ b/some/path/to/file.cSaya sering membuka file di editor dengan
cmd-klik di iTerm, tetapi di sini tidak berfungsi karena prefiksa/danb/. Apakah ada cara agar Git memformat nama file dengan lebih baik? Dua baris itu juga sebenarnya tidak selalu diperlukangit config --global diff.noprefix trueUntuk opsi lain terkait prefiks, lihat manualnya
Saya memakai kombinasi delta dan difftastic, dan keduanya luar biasa
Difftastic khususnya kuat pada sintaks AST tree-sitter, jadi meski agak lambat, diff yang memahami AST benar-benar bagus
Delta rapi dan sangat cepat
Ini tip berguna untuk mengaktifkan dan menonaktifkan fitur side-by-side Delta tergantung ukuran jendela. Di sini contohnya untuk bash; shell lain bisa disesuaikan sendiri
function delta_sidebyside {if [[ COLUMNS -ge 120 ]]; thenDELTA_FEATURES='side-by-side'elseDELTA_FEATURES=''fi}trap delta_sidebyside WINCH$sebelumCOLUMNShilang, dan kemungkinan besarexportjuga diperlukan sebelum menetapkanDELTA_FEATURESSaya memakai delta dan difftastic, dan rasanya tidak ada rekomendasi yang terlalu berlebihan untuk keduanya
Jika Anda memakai terminal sedikit saja, sebaiknya pasang
Keduanya didukung di Magit milik Emacs, dan juga didukung di Lazygit
tig juga layak dicoba: https://jonas.github.io/tig/
Karena selama ini saya memakai
git diffbiasa yang berwarna, saya sebenarnya ingin menyukai ini, tetapi terlihat terlalu rumitSebagai catatan, ini proyek saya
git diffasli punya masalah berarti