Ketika saya memiliki diff, bagaimana saya bisa mewarnainya sehingga terlihat bagus? Saya menginginkannya untuk baris perintah, jadi tolong jangan ada solusi GUI.
unix
command-line
colors
diff
daniel kullmann
sumber
sumber
Jawaban:
Halaman manual untuk
diff
menyarankan tidak ada solusi untuk pewarnaan dari dalam dirinya sendiri. Silakan pertimbangkan untuk menggunakancolordiff
. Ini adalah pembungkusdiff
yang menghasilkan output yang sama dengan diff, kecuali bahwa itu menambah output menggunakan highlight sintaks berwarna untuk meningkatkan keterbacaan:atau hanya:
Instalasi:
sudo apt-get install colordiff
brew install colordiff
atauport install colordiff
sumber
less -R
, yang menampilkan urutan pelarian untuk warna dengan benar.-y
opsi untuk mengaktifkan) ☹vimdiff
Saran di bawah ini mungkin cara yang lebih baikcolordiff
berfungsi dengan baik untuksvn diff | colordiff
(yaitu dalam situasi di mana Anda hanya memiliki diff, bukan dua file yang sedang di-diff).-y
dukungan berdampingan ( ).Gunakan Vim :
Atau lebih baik lagi, VimDiff (atau
vim -d
, yang lebih pendek untuk mengetik) akan menunjukkan perbedaan antara dua, tiga atau empat file berdampingan.Contoh:
sumber
ctrl-c
danctrl-x
memiliki kegunaan lain di Vim.ctrl-q
ditangkap oleh banyak terminal. Lihat Menulis dan berhenti untuk menemukan cara yang paling sesuai dengan kebutuhan Anda.zsh
? Saya tidak mengenali=(...)
konstruk. Kedua, adadiff -ur a b
dalam pikiran saya.=(...)
diganti dengan nama file yang berisi hasilnya.Sebenarnya sepertinya ada pilihan lain (yang baru saya perhatikan baru-baru ini, ketika mengalami masalah yang dijelaskan di atas):
Jika Anda memiliki Git (yang mungkin sudah Anda gunakan), maka Anda dapat menggunakannya untuk perbandingan, bahkan jika file itu sendiri tidak di bawah kontrol versi. Jika tidak diaktifkan untuk Anda secara default, mengaktifkan dukungan warna di sini tampaknya jauh lebih mudah daripada beberapa solusi yang disebutkan sebelumnya.
sumber
git diff <(xxd file1) <(xxd filed)
tidak berfungsi.git help diff
. Jadi jika git diff Anda kosong, cobacd
keluar dari tempat Anda berada.git config color.diff auto
git diff --no-index
untuk membandingkan dua file.diff --color
opsi ditambahkan ke GNU diffutils 3.4 (2016-08-08)Ini adalah
diff
implementasi default pada sebagian besar distro, yang akan segera mendapatkannya.Ubuntu 18.04 memiliki
diffutils
3.6 dan karenanya memilikinya.Pada 3.5 terlihat seperti ini:
Diuji:
Rupanya ditambahkan di commit c0fa19fe92da71404f809aafb5f51cfd99b1bee2 (Mar 2015).
Perbedaan tingkat kata
Seperti
diff-highlight
. Sepertinya tidak mungkin, permintaan fitur: https://lists.gnu.org/archive/html/diffutils-devel/2017-01/msg00001.htmlUtas terkait:
ydiff
meskipun begitu, lihat di bawah.ydiff
perbedaan level kata berdampinganhttps://github.com/ymattw/ydiff
Apakah ini Nirvana?
Hasil:
Jika garis terlalu sempit (default 80 kolom), paskan layar dengan:
Isi file uji:
Sebuah
b
ydiff
Integrasi gitydiff
terintegrasi dengan Git tanpa konfigurasi apa pun yang diperlukan.Dari dalam repositori git, alih-alih
git diff
, Anda bisa melakukannya:dan bukannya
git log
:Lihat juga: Bagaimana saya bisa mendapatkan diff berdampingan ketika saya melakukan "git diff"?
Diuji pada Ubuntu 16.04, git 2.18.0, ydiff 1.1.
sumber
There is no word-highlighting, yet
- ada pembaruan? Inilah yang saya datangi untuk pertanyaan ini (saya ingin-grep --color
seperti keluaran diff).git diff --color
juga bekerja. Berguna saat bekerja di ssh.diff --color=always | less -R
Dan untuk saat-saat ketika sebuah
yum install colordiff
atauapt-get install colordiff
bukan merupakan pilihan karena kendala gila di luar kendali langsung Anda, atau Anda hanya merasa gila , Anda dapat menciptakan kembali roda dengan sederet:Lemparkan itu dalam skrip shell dan pipa un diff output melaluinya.
Ini membuat marka biru dan menyoroti nama file baru / lama dan menambahkan / menghapus garis di latar belakang hijau dan merah, masing-masing. 1 Dan itu akan membuat spasi tambahan 2 perubahan lebih mudah terlihat daripada yang bisa dilakukan colordiff.
1 Secara kebetulan, alasan untuk menyorot nama file sama dengan baris yang dimodifikasi adalah bahwa untuk membedakan antara nama file dan baris yang dimodifikasi secara tepat membutuhkan penguraian format diff, yang bukan sesuatu untuk ditangani dengan regex. Menyoroti mereka sama berfungsi "cukup baik" secara visual dan membuat masalah sepele. Yang mengatakan, ada beberapa seluk-beluk yang menarik .
2 Tapi tidak mengeklik tab. Rupanya tab tidak mendapatkan latar belakang mereka, setidaknya di xterm saya. Itu membuat perubahan tab vs ruang sedikit menonjol.
sumber
sed "s/^-/`echo -e \"\x1b\"`[41m-/;s/^+/`echo -e \"\x1b\"`[42m+/;s/^@/`echo -e \"\x1b\"`[34m@/;s/$/`echo -e \"\x1b\"`[0m/"
(meskipun saya berharap ada cara yang lebih baik).Anda dapat mengubah konfigurasi subversi untuk menggunakan colordiff
~ / .subversion / config.diff
via: https://gist.github.com/westonruter/846524
sumber
Berwarna, ouput tingkat kata
diff
Inilah yang dapat Anda lakukan dengan skrip di bawah ini dan sorot berbeda :
( Terima kasih atas jawaban @ retracile untuk
sed
sorotan)sumber
vim
, gunakan plugin, mis . Diffchar .Saya menggunakan
grc
(Generic Colouriser), yang memungkinkan Anda untuk mewarnai keluaran dari sejumlah perintah termasukdiff
.Ini adalah skrip python yang dapat membungkus perintah apa pun. Jadi, alih-alih memohon
diff file1 file2
, Anda akan memintagrc diff file1 file2
untuk melihat output berwarna. Saya telah aliasdiff
untukgrc diff
untuk membuatnya lebih mudah.sumber
fork()
panggilan, meskipun kemungkinan bekerja dengan WSL.Berikut ini adalah solusi lain yang memanggil
sed
untuk memasukkan urutan ANSI escape sesuai untuk warna untuk menunjukkan+
,-
dan@
garis-garis merah, hijau, dan cyan masing-masing.Berbeda dengan solusi lain untuk pertanyaan ini, solusi ini tidak menguraikan urutan pelarian ANSI secara eksplisit. Sebagai gantinya, ia memanggil
tput setaf
dantput sgr0
memerintahkan untuk menghasilkan urutan pelarian ANSI masing-masing untuk mengatur warna yang sesuai dan mengatur ulang atribut terminal.Untuk melihat warna yang tersedia untuk setiap argumen
tput setaf
, gunakan perintah ini:Berikut tampilan hasilnya:
Berikut adalah bukti bahwa perintah
tput setaf
dantput sgr0
menghasilkan urutan pelarian ANSI yang sesuai:sumber
Karena
wdiff
accepts args menentukan string di awal dan akhir dari kedua penyisipan dan penghapusan, Anda dapat menggunakan urutan warna ANSI sebagai string tersebut:Sebagai contoh, ini adalah hasil dari membandingkan dua file CSV:
Contoh dari https://www.gnu.org/software/wdiff/manual/html_node/wdiff-Examples.html
sumber
colordiff
sekarang (1.0.16) mengertiwdiff
, sehingga Anda juga dapat hanya pipa:wdiff -n f1 f2 | colordiff
.wdiff
harus digabung menjadi diffutils ...Saya sarankan Anda untuk mencoba diff-so-fancy . Saya menggunakannya selama pekerjaan saya dan itu tampak hebat seperti sekarang. Itu datang dikemas dengan banyak pilihan dan sangat mudah untuk mengkonfigurasi diff Anda seperti yang Anda inginkan.
Anda dapat menginstalnya dengan:
atau di Mac:
Setelah itu, Anda dapat menyorot diff Anda seperti ini:
sumber
Dengan perintah kelelawar :
sumber
Pada git versi terbaru di Ubuntu, Anda dapat mengaktifkan diff-highlighting dengan:
Dan kemudian menambahkan ini ke Anda
.gitconfig
:Mungkin saja skrip tersebut berada di tempat lain di distro lain, bisa Anda gunakan
locate diff-highlight
untuk mencari tahu di mana.sumber
Perbedaan warna tingkat karakter: Instal ccdiff
sumber