Khi tôi có một khác biệt, làm thế nào tôi có thể tô màu nó để nó trông tốt? Tôi muốn nó cho dòng lệnh, vì vậy xin vui lòng không có giải pháp GUI.
Khi tôi có một khác biệt, làm thế nào tôi có thể tô màu nó để nó trông tốt? Tôi muốn nó cho dòng lệnh, vì vậy xin vui lòng không có giải pháp GUI.
Câu trả lời:
Trang man cho diff
đề xuất không có giải pháp cho màu sắc từ bên trong chính nó. Hãy xem xét sử dụng colordiff
. Đó là một trình bao bọc diff
tạo ra cùng một đầu ra như diff, ngoại trừ việc nó tăng đầu ra bằng cách sử dụng tô sáng cú pháp màu để tăng khả năng đọc:
diff old new | colordiff
hoặc chỉ:
colordiff old new
Cài đặt:
sudo apt-get install colordiff
brew install colordiff
hoặcport install colordiff
less -R
, hiển thị các chuỗi thoát cho màu sắc một cách chính xác.
-y
tùy chọn để kích hoạt) ☹ Các vimdiff
gợi ý dưới đây có thể là một cách tốt hơn
colordiff
hoạt động tốt cho svn diff | colordiff
(nghĩa là trong trường hợp bạn chỉ có diff, không phải hai tệp bị diff).
-y
hỗ trợ side ( ).
Sử dụng Vim :
diff /path/to/a /path/to/b | vim -R -
Hoặc tốt hơn nữa, VimDiff (hoặc vim -d
, ngắn hơn để gõ) sẽ hiển thị sự khác biệt giữa hai, ba hoặc bốn tệp cạnh nhau.
vim -d /path/to/[ab]
vimdiff file1 file2 file3 file4
ctrl-c
và ctrl-x
có những ứng dụng khác trong Vim. ctrl-q
được bắt bởi nhiều thiết bị đầu cuối. Xem Viết và bỏ để tìm cách phù hợp nhất với nhu cầu của bạn.
zsh
? Tôi không nhận ra =(...)
cấu trúc. Thứ hai, tôi đã có diff -ur a b
trong tâm trí.
=(...)
được thay thế bằng tên của tệp chứa đầu ra của nó.
Trên thực tế dường như có một tùy chọn khác (mà tôi chỉ nhận thấy gần đây, khi gặp vấn đề được mô tả ở trên):
git diff --no-index <file1> <file2>
# output to console instead of opening a pager
git --no-pager diff --no-index <file1> <file2>
Nếu bạn có Git xung quanh (dù sao bạn cũng có thể đang sử dụng), thì bạn sẽ có thể sử dụng nó để so sánh, ngay cả khi các tệp không nằm trong sự kiểm soát phiên bản. Nếu không được bật cho bạn theo mặc định, thì việc bật hỗ trợ màu ở đây dường như dễ dàng hơn đáng kể so với một số cách giải quyết được đề cập trước đó.
git diff <(xxd file1) <(xxd filed)
không hoạt động.
git help diff
. Vì vậy, nếu git diff của bạn sắp hết, hãy thử cd
xem bạn đang ở đâu.
git config color.diff auto
git diff --no-index
để so sánh hai tệp.
diff --color
tùy chọn đã được thêm vào GNU diffutils 3.4 (2016-08-08)
Đây là diff
triển khai mặc định trên hầu hết các bản phát hành, sẽ sớm nhận được nó.
Ubuntu 18.04 có diffutils
3.6 và do đó có nó.
Trên 3.5, nó trông như thế này:
Thử nghiệm:
diff --color -u \
<(seq 6 | sed 's/$/ a/') \
<(seq 8 | grep -Ev '^(2|3)$' | sed 's/$/ a/')
Rõ ràng được thêm vào cam kết c0fa19fe92da71404f809aafb5f51cfd99b1bee2 (tháng 3 năm 2015).
Khác biệt cấp độ từ
Thích diff-highlight
. Có vẻ như không thể, yêu cầu tính năng: https://lists.gnu.org/archive/html/diffutils-devel/2017-01/msg00001.html
Chủ đề liên quan:
ydiff
mặc dù vậy, xem bên dưới.
ydiff
cấp độ từ bên cạnh
https://github.com/ymattw/ydiff
Đây có phải là Niết bàn không?
python3 -m pip install --user ydiff
diff -u a b | ydiff -s
Kết quả:
Nếu các dòng quá hẹp (80 cột mặc định), phù hợp với màn hình với:
diff -u a b | ydiff -w 0 -s
Nội dung của các tệp thử nghiệm:
một
1
2
3
4
5 the original line the original line the original line the original line
6
7
8
9
10
11
12
13
14
15 the original line the original line the original line the original line
16
17
18
19
20
b
1
2
3
4
5 the original line teh original line the original line the original line
6
7
8
9
10
11
12
13
14
15 the original line the original line the original line the origlnal line
16
17
18
19
20
ydiff
Tích hợp Git
ydiff
tích hợp với Git mà không cần bất kỳ cấu hình nào.
Từ bên trong kho git, thay vì git diff
, bạn có thể thực hiện:
ydiff -s
và thay vì git log
:
ydiff -ls
Xem thêm: Làm thế nào tôi có thể nhận được một khác biệt bên cạnh khi tôi làm "git diff"?
Đã thử nghiệm trên Ubuntu 16.04, git 2.18.0, ydiff 1.1.
There is no word-highlighting, yet
- có bản cập nhật nào không? Đây là những gì tôi đã đến với câu hỏi này cho (tôi muốn grep --color
- giống như đầu ra khác).
git diff --color
cũng vậy. Hữu ích khi làm việc trên ssh.
diff --color=always | less -R
Và trong những trường hợp khi một yum install colordiff
hoặc apt-get install colordiff
không phải là một lựa chọn do một số ràng buộc điên rồ ngoài tầm kiểm soát ngay lập tức của bạn, hoặc bạn chỉ cảm thấy điên rồ , bạn có thể phát minh lại bánh xe bằng một dòng sed:
sed 's/^-/\x1b[41m-/;s/^+/\x1b[42m+/;s/^@/\x1b[34m@/;s/$/\x1b[0m/'
Ném nó trong một tập lệnh shell và đầu ra khác biệt thống nhất qua nó.
Nó làm cho các dấu hunk màu xanh lam và làm nổi bật tên tệp mới / cũ và các dòng được thêm / xóa trong nền màu xanh lá cây và đỏ, tương ứng. 1 Và nó sẽ làm cho không gian dấu 2 thay đổi dễ thấy hơn so với colordiff có thể.
1 Ngẫu nhiên, lý do làm nổi bật tên tệp giống như các dòng được sửa đổi là để phân biệt chính xác giữa tên tệp và các dòng được sửa đổi đòi hỏi phải phân tích đúng định dạng diff, đây không phải là điều cần xử lý với biểu thức chính quy. Làm nổi bật chúng cùng một tác phẩm "đủ tốt" một cách trực quan và làm cho vấn đề trở nên tầm thường. Điều đó nói rằng, có một số tinh tế thú vị .
2 Nhưng không theo dõi tab. Rõ ràng các tab không được đặt nền của chúng, ít nhất là trong xterm của tôi. Nó làm cho tab và thay đổi không gian nổi bật một chút mặc dù.
sed "s/^-/`echo -e \"\x1b\"`[41m-/;s/^+/`echo -e \"\x1b\"`[42m+/;s/^@/`echo -e \"\x1b\"`[34m@/;s/$/`echo -e \"\x1b\"`[0m/"
(mặc dù tôi mong đợi có một cách tốt hơn).
Bạn có thể thay đổi cấu hình lật đổ để sử dụng colordiff
~ / .subversion / config.diff
### Set diff-cmd to the absolute path of your 'diff' program.
### This will override the compile-time default, which is to use
### Subversion's internal diff implementation.
-# diff-cmd = diff_program (diff, gdiff, etc.)
+diff-cmd = colordiff
thông qua: https://gist.github.com/westonruter/846524
Màu, từ cấp diff
ouput
Đây là những gì bạn có thể làm với đoạn script bên dưới và diff-highlight :
#!/bin/sh -eu
# Use diff-highlight to show word-level differences
diff -U3 --minimal "$@" |
sed 's/^-/\x1b[1;31m-/;s/^+/\x1b[1;32m+/;s/^@/\x1b[1;34m@/;s/$/\x1b[0m/' |
diff-highlight
(Tín dụng cho câu trả lời của @ retracile cho phần sed
tô sáng)
Tôi sử dụng grc
(Generic Colouriser), cho phép bạn tô màu đầu ra của một số lệnh bao gồm diff
.
Nó là một kịch bản python có thể được bọc xung quanh bất kỳ lệnh nào. Vì vậy, thay vì gọi diff file1 file2
, bạn sẽ gọi grc diff file1 file2
để xem đầu ra màu. Tôi đã aliased diff
để grc diff
để làm cho nó dễ dàng hơn.
fork()
các cuộc gọi, mặc dù có khả năng hoạt động với WSL.
Dưới đây là một giải pháp mà gọi sed
để chèn chuỗi ANSI thoát phù hợp với màu sắc hiển thị +
, -
và @
dòng màu đỏ, xanh lá cây, và màu lục lam, tương ứng.
diff -u old new | sed "s/^-/$(tput setaf 1)&/; s/^+/$(tput setaf 2)&/; s/^@/$(tput setaf 6)&/; s/$/$(tput sgr0)/"
Không giống như các giải pháp khác cho câu hỏi này, giải pháp này không đánh vần rõ ràng các chuỗi thoát ANSI. Thay vào đó, nó gọi các lệnh tput setaf
và tput sgr0
lệnh để tạo các chuỗi thoát ANSI để đặt màu tương ứng và đặt lại các thuộc tính đầu cuối tương ứng.
Để xem các màu có sẵn cho mỗi đối số tput setaf
, hãy sử dụng lệnh này:
for i in {0..255}; do tput setaf $i; printf %4d $i; done; tput sgr0; echo
Đây là cách đầu ra trông:
Dưới đây là bằng chứng cho thấy các lệnh tput setaf
và tput sgr0
lệnh tạo ra các chuỗi thoát ANSI thích hợp:
$ tput setaf 1 | xxd -g1
00000000: 1b 5b 33 31 6d .[31m
$ tput setaf 2 | xxd -g1
00000000: 1b 5b 33 32 6d .[32m
$ tput setaf 6 | xxd -g1
00000000: 1b 5b 33 36 6d .[36m
$ tput sgr0 | xxd -g1
00000000: 1b 28 42 1b 5b 6d .(B.[m
Vì wdiff
chấp nhận các đối số chỉ định chuỗi ở đầu và cuối của cả chèn và xóa, nên bạn có thể sử dụng các chuỗi màu ANSI làm các chuỗi đó:
wdiff -n -w $'\033[30;41m' -x $'\033[0m' -y $'\033[30;42m' -z $'\033[0m' file1 file2
Ví dụ: đây là đầu ra của việc so sánh hai tệp CSV:
Ví dụ từ https://www.gnu.org/software/wdiff/manual/html_node/wdiff-Examples.html
colordiff
bây giờ (1.0.16) đã hiểu wdiff
, vì vậy bạn cũng có thể chỉ cần ống : wdiff -n f1 f2 | colordiff
. wdiff
nên được sáp nhập vào diffutils ...
Tôi sẽ đề nghị bạn thử diff-so-Fancy . Tôi sử dụng nó trong công việc của tôi và nó chắc chắn có vẻ tuyệt vời như bây giờ. Nó đi kèm với nhiều tùy chọn và thật dễ dàng để cấu hình khác biệt của bạn theo cách bạn muốn.
Bạn có thể cài đặt nó bằng cách:
sudo npm install -g diff-so-fancy
hoặc trên máy Mac:
brew install diff-so-fancy
Sau đó, bạn có thể làm nổi bật các khác biệt của bạn như thế này:
diff -u file1 file2 | diff-so-fancy
Với lệnh bat :
diff file1 file2 | bat -l diff
Trên các phiên bản gần đây của git trên Ubuntu, bạn có thể bật tính năng làm nổi bật khác với:
sudo ln -s /usr/share/doc/git/contrib/diff-highlight/diff-highlight /usr/local/bin
sudo chmod a+x /usr/share/doc/git/contrib/diff-highlight/diff-highlight
Và sau đó thêm nó vào .gitconfig
:
[pager]
log = diff-highlight | less
show = diff-highlight | less
diff = diff-highlight | less
Có thể tập lệnh được đặt ở một nơi khác trong các bản phát hành khác, bạn có thể sử dụng locate diff-highlight
để tìm ra nơi.