Nhẹ (tinh khiết) khác biệt?


7

Tôi cần hiển thị từ khác của một số chuỗi nhỏ.

Đó là, tôi có một danh sách các cặp tương tự như sau:

"aaa bbb ccc" . "aaa vv ccc"
"abcd ef ghkl" . "ghkl"
"a (u -> h)" . "(a -> g) (u -> h)"

Trong mỗi trường hợp tôi muốn làm nổi bật văn bản đã thay đổi hoặc thêm vào. Tôi có thể làm điều này với nhiều cuộc gọi đến lệnh diff, nhưng tôi sợ chi phí.

Có thư viện elisp mà tôi có thể sử dụng cho mục đích này?


Bạn đã thực sự thử gọi lệnh diff biên dịch chưa? Chi phí có thể thấp hơn tốc độ bạn mất khi chuyển từ mã c được biên dịch sang elisp.
Tyler

@Tyler Tôi không có, vì tôi không có gì để so sánh chi phí với.
Clément

2
À không, nhưng nếu nó đủ nhanh, bạn không cần so sánh nó với bất cứ thứ gì khác
Tyler

Có lẽ chi phí không phải là từ đúng; ngoài hiệu năng, tôi quan tâm đến các khía cạnh khác: một giải pháp tốt sẽ mạnh mẽ hơn (ví dụ người dùng Windows không nhất thiết phải cài đặt diff) và có thể dễ bảo trì hơn. AFAIK diff yêu cầu các tệp, vì vậy tôi phải viết hai tệp cho mỗi cặp. Đó là 200 chu kỳ đọc và viết cho một danh sách 100 cặp để so sánh; trừ khi tôi không có lựa chọn khác, tôi không thực sự muốn làm điều đó.
Clément

Front-end wdiff to diff sẽ làm điều này, mà không yêu cầu bạn phải viết rõ ràng bất kỳ tệp nào: wdiff <(echo "abc def ghi" ) <(echo "abc ghi")=> abc [-def-] ghi. Nhưng điều đó phụ thuộc vào việc cài đặt wdiff và diffutils, điều này sẽ không hữu ích nếu bạn đang xây dựng một cái gì đó để sử dụng chung trên Windows, vì vậy tôi đoán bạn cần một giải pháp cần thiết.
Tyler

Câu trả lời:


3

Tôi không nghĩ rằng có một giải pháp Elisp hiện có cho điều đó. Nhưng nếu bạn nhìn vào cách tôi triển khai smerge-refine-subst(cũng được sử dụng diff-refine-hunk), nó sẽ cho bạn một số ý tưởng về cách bạn có thể chơi với diff.

IOW bạn sẽ có thể chạy một diffquy trình duy nhất để xử lý tất cả các dòng của mình cùng một lúc, bằng cách nối chúng và thêm "các dòng đồng bộ hóa" ở giữa. Ngoài ra, để tránh diffbị nhầm lẫn khi các dòng từ một cặp khớp với các dòng từ một cặp khác, có lẽ bạn sẽ muốn thêm một số văn bản (duy nhất cho mỗi cặp) trước mỗi dòng.


Cảm ơn Stefan! Bối cảnh đang khác nhau hai mục tiêu Coq trong PG. Tôi tự hỏi nếu tôi chỉ có thể tái sử dụng diff-refine-hunk? Tôi có thể tạo một tệp diff giả với mỗi cặp, sau đó gọi refine-hunk trên mỗi cặp.
Clément

Sử dụng tốt hơn smerge-refine-subst(đó là những gì được sử dụng trong nội bộ diff-refine-hunk. Nhưng điều đó thực hiện một diffquy trình, vì vậy nếu bạn muốn chạy một khác biệt cho tất cả các cặp, bạn sẽ cần phải xoa bóp đầu vào của mình bằng tay.
Stefan
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.