Trình kiểm tra Diff
Dán hai đoạn văn bản và xem các khác biệt được làm nổi bật.
Diff
- Dán văn bản gốc vào Văn bản A.
- Dán phiên bản đã thay đổi vào Văn bản B.
- Chọn Dòng cho code/config hoặc Từ cho văn xuôi.
- Bật Bỏ qua khoảng trắng hoặc Bỏ qua chữ hoa/thường nếu các thay đổi không nhìn thấy được đang thêm nhiễu.
- Đọc đầu ra được làm nổi bật bên dưới — xanh là đã thêm, đỏ là đã xóa.
Công cụ này làm gì?
Trình kiểm tra Diff so sánh hai đoạn văn bản và cho biết chính xác những gì đã được thêm, xóa, hoặc giữ nguyên. Chế độ Dòng coi mỗi dòng là một đơn vị — lý tưởng cho mã nguồn và config nơi toàn bộ dòng thường thay đổi cùng lúc. Chế độ Từ phân tách theo khoảng trắng và tốt hơn cho văn xuôi nơi bạn quan tâm đến chỉnh sửa cấp token.
Ví dụ
Văn bản A:
function greet(name) {
console.log("Hello, " + name);
} Văn bản B:
function greet(name) {
if (!name) name = "world";
console.log(`Hello, ${name}!`);
} Diff trong chế độ dòng:
function greet(name) {
+ if (!name) name = "world";
- console.log("Hello, " + name);
+ console.log(`Hello, ${name}!`);
} Lỗi và cạm bẫy thường gặp
Khi hai dòng trông giống hệt nhau nhưng diff vẫn đánh dấu chúng là đã thay đổi, nguyên nhân gần như luôn là một ký tự không nhìn thấy được hoặc khác biệt chữ hoa/thường. Đây là những nghi phạm thông thường.
- Kết thúc dòng CRLF vs LF. Tệp Windows kết thúc dòng bằng \r\n, tệp Unix bằng \n. Ngay cả một ký tự khác biệt cũng đánh dấu mọi dòng. Khắc phục bằng cách bật Bỏ qua khoảng trắng, hoặc chuẩn hóa với dos2unix / cài đặt trình chỉnh sửa của bạn.
- Khoảng trắng cuối. "foo " và "foo" khác nhau trừ khi khoảng trắng bị bỏ qua. Việc lưu tệp config loại bỏ khoảng trắng cuối sẽ khiến mọi dòng được chạm đến trông đã thay đổi.
- Tab vs khoảng trắng. Định dạng lại thay tab bằng khoảng trắng (hoặc ngược lại) khiến mọi dòng thụt lề trông khác nhau trong chế độ khớp chính xác. Bật Bỏ qua khoảng trắng hoặc định dạng lại cả hai bên giống hệt nhau trước.
- Dấu thứ tự byte (BOM). Các tệp được lưu dưới dạng UTF-8 có BOM bắt đầu bằng vô hình. "Dòng" đầu tiên đó sẽ luôn xuất hiện là đã thay đổi khi diff với tệp không có BOM. Loại bỏ BOM trong trình chỉnh sửa của bạn hoặc trình chỉnh sửa hex trước khi dán.
- Dấu ngoặc kép thông minh hoặc khoảng trắng không ngắt. Dán từ trình xử lý văn bản có thể hoán đổi " bằng " hoặc khoảng trắng thường bằng khoảng trắng không ngắt. Chúng trông giống hệt nhau nhưng là các code point khác nhau. Chuẩn hóa văn bản sang ASCII thuần trước khi diff.
- Chỉ khác biệt chữ hoa/thường. API và api là các chuỗi khác nhau trừ khi bạn bật Bỏ qua chữ hoa/thường. Các kết quả khớp cơ bản vẫn hiển thị văn bản gốc; chỉ so sánh được nới lỏng.
Câu hỏi thường gặp
Sự khác biệt giữa chế độ dòng và từ là gì?
Chế độ dòng so sánh văn bản một dòng một lần — nếu bất kỳ ký tự nào trên một dòng thay đổi, toàn bộ dòng được đánh dấu là đã xóa khỏi A và thêm vào B. Chế độ từ phân tách theo khoảng trắng và cho thấy diff chi tiết hơn, tốt hơn cho văn xuôi. Đối với mã nguồn và tệp config, chế độ dòng gần như luôn là những gì bạn muốn.
Tại sao các dòng trông giống hệt nhau lại xuất hiện là đã thay đổi?
Thường là một trong ba khác biệt vô hình: kết thúc dòng (CRLF trên Windows vs LF trên Unix), khoảng trắng cuối, hoặc dấu thứ tự byte (BOM) ở đầu tệp. Bật "Bỏ qua khoảng trắng" để bỏ qua hai cái đầu. Đối với BOM, mở tệp trong trình chỉnh sửa hex hoặc loại bỏ các byte đầu trước khi dán.
Nó có diff theo từng ký tự không?
Không. Trong chế độ dòng, nó diff theo dòng; trong chế độ từ, nó diff theo token cách nhau bởi khoảng trắng. Diff cấp ký tự tạo ra đầu ra ồn ào cho hầu hết văn bản thực. Nếu bạn cần so sánh cấp ký tự cho các chuỗi ngắn, dán chúng vào chế độ từ — mỗi ký tự sẽ thực chất là token riêng nếu không có khoảng trắng.
Đầu vào có thể lớn đến mức nào?
Diff chạy trong bộ nhớ, nên giới hạn thực tế là RAM trình duyệt của bạn. Tối đa vài MB mỗi bên hoạt động tốt; hàng chục MB có thể đóng băng tab trong chốc lát vì việc hiển thị HTML được làm nổi bật chậm hơn chính diff. Đối với các tệp rất lớn, chạy diff cục bộ với GNU diff hoặc git diff.
Tôi có thể bỏ qua chữ hoa/thường hoặc khoảng trắng không?
Có — cả hai đều là công tắc trong thanh công cụ. "Bỏ qua khoảng trắng" coi bất kỳ chuỗi khoảng trắng nào là tương đương, hữu ích cho mã đã định dạng lại. "Bỏ qua chữ hoa/thường" coi "Hello" và "hello" là giống nhau. Các kết quả khớp cơ bản vẫn hiển thị văn bản gốc; chỉ so sánh được nới lỏng.
Bạn có lưu văn bản tôi dán vào hai ô không?
Không. Chúng tôi không giữ bất cứ thứ gì bạn dán ở đây — không phải văn bản "trước" cũng không phải văn bản "sau". Bất cứ thứ gì bạn so sánh đều bị loại bỏ ngay khi bạn đóng hoặc làm mới trang. Không có log, không có phân tích về nội dung của bạn. Nếu bạn muốn yên tâm thêm, developer tools của trình duyệt sẽ cho bạn thấy chuyện gì đang xảy ra.