Tô màu khoảng trắng trong đầu ra của git-diff


151

Về định dạng mã Tôi là loại người theo chủ nghĩa thuần túy :). Tôi rất thường loại bỏ các khoảng trắng không cần thiết (các dòng chỉ có ws, ws ở cuối dòng, v.v.). Tôi thậm chí đã đặt vim để hiển thị loại đường kẻ có màu đỏ.

Vấn đề của tôi là sử dụng git-diff tôi thường thấy một cái gì đó như thế này:

-      else{ 
+      else{

Ngay cả khi tôi có màu git-diff tôi cũng không thể thấy sự khác biệt (trong tình huống cụ thể đó, tôi đã xóa 1 ws ở cuối dòng). Có cách nào để nói với git-diff để chỉ ra rằng ws được tô màu đỏ không? (ví dụ: những người khớp với / \ s + $ / regapi).


4
Nếu bạn đảo ngược màu sắc (hoán đổi nền trước và nền), những thay đổi khoảng trắng như thế này sẽ hiển thị. Một cách dễ dàng để thực hiện điều này trong nhiều thiết bị đầu cuối là làm nổi bật văn bản được đề cập bằng chuột. Thủ thuật này chỉ hoạt động với một khác màu, tất nhiên.
Phlarx

Câu trả lời:


172

Bạn có thể cần đặt cài đặt cấu hình color.diff.whitespace, ví dụ:

 git config color.diff.whitespace "red reverse"

(Tôi giả sử rằng bạn đã có color.diffhoặc color.uiđược đặt autotừ khi bạn nói rằng git diffdù sao bạn cũng thấy các bản vá màu .)

Nếu bạn muốn tinh chỉnh loại lỗi khoảng trắng được tô sáng màu đỏ, thì bạn có thể thay đổi core.whitespace, nhưngblank-at-eol được bật theo mặc định để có thể bạn sẽ không cần phải thay đổi ví dụ mà bạn đề cập.

Một nguồn gây nhầm lẫn có thể là trong đầu ra của git diff, các lỗi khoảng trắng chỉ được tô sáng trong các dòng được giới thiệu, không phải là những lỗi được loại bỏ. ( Cập nhật: như Paul Whittaker chỉ ra trong câu trả lời của anh ấy , mà bạn nên bỏ phiếu :), bạn có thể thấy những điều này bằng cách đảo ngược ý nghĩa của khác biệt với git diff -R.)

Bạn có thể tìm thêm tài liệu về các tùy chọn cấu hình này trong trang git config man

Nếu bạn không muốn sử dụng -Rbùn, bạn có thể sử dụng tùy chọn HighSpace Error Highlight từ trang diff man .

--ws-error-highlight =

Đánh dấu lỗi khoảng trắng trên các dòng được chỉ định bởi màu được chỉ định bởi color.diff.whitespace. là một danh sách được phân tách bằng dấu phẩy của bối cảnh cũ, mới ,. Khi tùy chọn này không được cung cấp, chỉ các lỗi khoảng trắng trong các dòng mới được tô sáng. Ví dụ: --ws-error-highlight = new, cũ nổi bật lỗi khoảng trắng trên cả dòng bị xóa và thêm. tất cả có thể được sử dụng như một bàn tay ngắn cho bối cảnh cũ, mới.

git diff --ws-error-highlight=new,old <file>

hoặc là

git diff --ws-error-highlight=all <file>

Tôi không biết cách nào để bật cái này vĩnh viễn và lưu nó trong cấu hình ngoài việc sử dụng bí danh:

git config alias.df 'diff --ws-error-highlight=all'

Bây giờ bạn có thể sử dụng:

git df <file>

Để xem những thay đổi trong màu đỏ.

Lưu ý rằng với Git 2.11 (Q4 2016) , bí danh này có thể được thay thế bằng:

git config diff.wsErrorHighlight all

Xem tài liệu trêngit difftrêngit config .


33
"Một nguồn gây nhầm lẫn có thể là trong đầu ra của git diff, các lỗi khoảng trắng chỉ được tô sáng trong các dòng được giới thiệu, không phải các lỗi được loại bỏ." Chính xác! Và không có cách nào để hiển thị nó cũng cho các dòng bị loại bỏ? (này, nó khác :))
radarek

6
Thêm --global để đặt trong ~ / .gitconfig
simlmx

17
@radarek: bạn có thể sử dụng tùy chọn đảo ngược:git diff -R
blueyed

6
Có một báo cáo lỗi cho điều này? Nếu không, có vẻ như nên có.
Ajedi32

3
này làm việc git config diff.wsErrorHighlight all. Sử dụng git config --global [...]để thực hiện các thay đổi toàn cầu (nghĩa là ảnh hưởng đến tất cả các repos).
Felipe Alvarez

141

Sử dụng git diff -Rđể biến các dòng bị loại bỏ thành các dòng được thêm vào. Sau đó, khoảng trắng dấu sẽ được tô sáng.

(Điều này giả sử bạn đã bật tính năng hightlighting trắng, theo cài đặt màu từ câu trả lời của Mark. Tín dụng cho phương pháp này được gửi đến bài đăng của Junio ​​tại http://git.661346.n2.nabble.com/Highlighting-whitespace-on-removal- với-git-diff-td5653205.html .)

Ví dụ, khi chuyển đổi một tệp từ các kết thúc dòng DOS sang Unix, git diff -Rhiển thị rõ ràng cho tôi các ^Mký tự (dis) xuất hiện ở cuối các dòng. Không có -R(và cũng không có, -wv.v.) cho thấy toàn bộ tệp đã thay đổi, nhưng không hiển thị như thế nào.


4
Tất nhiên, bạn cũng có thể làm git diff | cat -A | less -Snếu bạn tuyệt vọng, nhưng ngoài việc trả lại xe, catnó cũng sẽ hiển thị bất kỳ màu nào làm nổi bật mã thoát theo nghĩa đen.
Paul Whittaker

3
@Paul_Whittaker cat -Akhông di động. Trên mèo BSD, không có tùy chọn như vậy. Vui lòng sử dụng cat -vetthay thế.
7heo.tk

9

Sử dụng git diff --color | less -R. Các -Rmã kiểm soát màu sắc thân thiện với con người.

Sau đó, bạn có thể sử dụng lesstìm kiếm biểu thức chính quy, vd

/[[:space:]]+$

Nhân tiện, biểu thức chính quy này cũng hoạt động vim.
Jose Alban

Ý tưởng cuối cùng này less -Rchỉ giúp tôi dễ dàng ls --colorvượt qua hơn less.
Menachem

0

Phiên bản của tôi git diffdường như đã làm điều này - tôi có git 1.7.4.1 và đã thiết lập color.ui = auto.


12
Tôi vừa thử nghiệm với git 1.7.5.1 và nó chắc chắn không làm nổi bật khoảng trắng ở các dòng bị xóa.
Kẻ xâm nhập
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.