การเปรียบเทียบไฟล์ข้อความสองไฟล์ในระบบ Windows


11

ตั้งแต่ediff-filesและediff-buffersส่งผลให้เกิดapply: Searching for program: no such file or directory, diffข้อผิดพลาดในเครื่อง windows

วิธีเปรียบเทียบสองไฟล์โดยใช้ Emacs บนระบบ windows


1
ด้วยการติดตั้ง GetGnuWin32 คุณจะสามารถเข้าถึงซอฟต์แวร์ gnu ได้มากมาย (ต่างกัน แต่ต่างกันมาก ... ) หากคุณสนใจเพียงต่างกันคุณสามารถไปกับgnu.org/software/diffutils
fredtantini

ข้อความแสดงข้อผิดพลาดจะบอกคุณว่ามีอะไรผิดปกติ: คุณยังไม่ได้diffติดตั้ง ไปรับCygwinแล้วลองอีกครั้ง
itsjeyd

@itsjeyd Cygwin ได้รับการติดตั้งในระบบแล้ว
ว่างเปล่าเมื่อ

@fredtantini หลังจากติดตั้ง GetGnuWin32 ฉันได้รับข้อผิดพลาดเดียวกัน
Empty_Mind

2
อยู่ในเส้นทางของคุณหรือไม่ ฉันคิดว่าอย่างน้อยไดเรกทอรีควรอยู่ในexec-pathตัวแปร
fredtantini

คำตอบ:


8

ดังที่ @nanny กล่าวไว้ในความคิดเห็นวิธีการแก้ปัญหาก็คือการติดตั้ง Cygwin ด้วย diffutils นี่คือวิธีที่จะทำ:

  1. ดาวน์โหลด Cygwin จากหน้าแรกของ
  2. ติดตั้ง Cygwin พร้อมdiffutils: A GNU collection of diff utilitiesแพ็คเกจ แพคเกจนี้สามารถพบได้ในUtilsส่วนหนึ่งในไม่กี่ขั้นตอนของการติดตั้ง Cygwin การติดตั้ง Cygwin ด้วย diffutils
  3. เพิ่มไดเรกทอรี Cygwin ให้กับตัวแปรระบบ windows PATH สิ่งนี้สามารถทำได้โดย:
    a) เพิ่มตัวแปร CYGWIN ของคุณเองเพื่อรักษาลำดับ การสร้างตัวแปรระบบ CYGWIN;
    b) และเพิ่มตัวแปรที่คุณเพิ่งสร้างให้กับตัวแปรระบบ PATHการเพิ่มตัวแปร CYGWIN ให้กับตัวแปรระบบ PATH

หลังจากนี้คุณสามารถโทรไปediff-buffers, ediff-filesและคนอื่น ๆ ที่ประสบความสำเร็จ ซึ่งมีลักษณะดังนี้:วิ่ง ediff

สนุก!


3

หากคุณมี git สำหรับ windows ติดตั้งอยู่ก็เพียงพอที่จะเพิ่ม

C:\Program Files\Git\usr\bin\

ไปที่ PATH ของคุณเพราะมันมาพร้อมกับไฟล์ปฏิบัติการ diff และติดตั้งไว้ในโฟลเดอร์นั้น


2

นี่อาจช่วยชีวิตผู้คนได้บ้างดังนั้นฉันจะตอบที่นี่ หากคุณไม่ต้องการเพิ่ม Cygwin binไดเรกทอรีไปยังเส้นทางของคุณ (หรือของคนอื่น ๆ ที่แนะนำในคำตอบอื่น ๆ ) คุณสามารถกำหนดเส้นทางของการใช้โปรแกรม ediff ediff-diff-programโดยการตั้งค่าตัวแปร ตัวอย่างเช่นคุณสามารถตั้งค่าเป็นC:\cygwin\bin(หรือเส้นทางใดก็ตามที่เป็นจริงในกรณีของคุณ) หากใช้ cygwin ฉันใช้เวลาพอสมควรกว่าจะหาว่าจะตั้งค่าตัวแปรใด บางอย่างที่ไม่ได้ทำงานคน: และediff-custom-diff-programdiff-command

ตัวอย่างเช่น:

(setq ediff-diff-program "c:/CYGWIN64/bin/diff.exe")

ทำมัน.


IIRC คุณไม่สามารถเรียก cygwin ไบนารีนอกเชลล์ได้เนื่องจากไม่สามารถโหลดบางไลบรารีได้ ฉันคิดว่านี่จะใช้ได้เฉพาะเมื่อ Emacs ทำงานจาก Cygwin ซึ่งควรPATHตั้งค่าตัวแปรอย่างถูกต้อง ช่วยแก้ให้ด้วยนะถ้าฉันผิด.
DoMiNeLa10

1
@ DoMiNeLa10 ฉันทดสอบบนเครื่อง Windows 10 ด้วย Emacs 26.1 โดยเริ่มต้น emacs จากทาสก์บาร์โดยไม่ทราบว่า Cygwin ... ทำงานได้ดี นอกจากนี้โซลูชันที่เพิ่มไปยังเส้นทางจะมีปัญหาเดียวกันกับที่คุณอธิบายหากเป็นปัญหาจริงๆ
sturgman

1
ฉันขอโทษส่วนสุดท้ายของความคิดเห็นของฉันไม่ถูกต้อง การเพิ่มไปยังเส้นทางจะไม่มีปัญหาแบบเดียวกันกับที่คุณแนะนำเนื่องจากจะสามารถค้นหาไลบรารีได้ ที่กล่าวว่าฉันทดสอบวิธีการในคำตอบและทำงานได้ดี
sturgman

0

หากคุณไม่ต้องการสร้างความแตกต่าง แต่เพียงต้องการค้นหาความแตกต่างระหว่างไฟล์วิธีหนึ่งที่ทำได้คือใช้M-x compare-windowsแทน

M-x compare-windowsเปิดแฟ้มที่สองเช่นที่คุณเห็นทั้งสองคนในเวลาเดียวกันชี้ย้ายไปจุดเริ่มต้นทั้งในบัฟเฟอร์และเรียกใช้ มันจะย้ายจุดไปยังตำแหน่งแรกที่ไฟล์ต่างกัน สิ่งนี้จะทำงานได้โดยไม่ต้องมีการปฏิบัติการจากภายนอก


1
นี่เป็นการหยุดจุดก่อนที่อักขระที่แตกต่างกันครั้งแรกในทั้งสองไฟล์
Empty_Mind

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.