ไม่สามารถเรียกใช้ Vimdiff (7.4) บน Windows 7


29

ฉันเพิ่งติดตั้ง gVim เวอร์ชัน 7.4 บนเครื่อง Windows 7 พยายามที่จะแตกต่างกันสองไฟล์จากเมนูตามบริบทบน Windows Explorer ฉันได้รับข้อความแสดงข้อผิดพลาด:

E810: ไม่สามารถอ่านหรือเขียนไฟล์ temp
E97: ไม่สามารถสร้าง diffs ได้

ไฟล์ที่เลือกสองไฟล์จะเปิดขึ้นในมุมมอง gVim สองบานหน้าต่างและตัวแก้ไขดูเหมือนจะอยู่ในโหมด diff แต่ความแตกต่างที่แท้จริงจะไม่ถูกเน้น

%TEMP%และ%TMP%ตัวแปรสภาพแวดล้อมจะมีประชากรที่มีชื่อไดเรกทอรีที่ถูกต้อง

ฉันได้รับการตอบสนองแบบเดียวกันเมื่อเปิดไฟล์ในเซสชัน gVim ปกติและพิมพ์:diffthisในพรอมต์คำสั่ง

สิ่งนี้เคยทำงานได้อย่างเหมาะสมกับ Vim 7.3 แต่ดูเหมือนว่ามีบางสิ่งเปลี่ยนแปลงใน v7.4

ฉันจะแตกต่างไฟล์สองไฟล์ได้อย่างไร

คำตอบ:


45

ปัญหานี้อาจเกิดจากไฟล์ _vimrc เริ่มต้นที่สร้างโดยโปรแกรมติดตั้งบน Windows หากคุณยังคงใช้แฟ้มเริ่มต้นที่หรือถ้าคุณคัดลอกในบางจุดแล้วตรวจสอบฟังก์ชั่นที่คุณได้รับมอบหมายให้เป็นdiffexprตัวเลือก หนึ่งในแพตช์ระหว่าง Vim 7.3 และ 7.4 ได้แนะนำกฎการอ้างอิงเริ่มต้นใหม่สำหรับเชลล์ cmd.exe บน Windows โปรแกรมแก้ไขนี้ทำให้วิธีแก้ปัญหาใน MyDiff () ฟังก์ชันที่ออกแบบมาเพื่อแก้ไขปัญหาเดียวกันแก้ไขได้โดยโปรแกรมปรับปรุง

ฟังก์ชั่น MyDiff () ได้รับการแก้ไขตามเวอร์ชั่น 7.4.103 โดยแก้ไขตัวติดตั้ง นี่คือฟังก์ชัน MyDiff () ซึ่งตัวติดตั้งล่าสุดจะสร้างให้คุณหากคุณเพียงต้องการคัดลอกไปยัง _vimrc ของคุณ:

 function MyDiff()
   let opt = '-a --binary '
   if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif
   if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif
   let arg1 = v:fname_in
   if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif
   let arg2 = v:fname_new
   if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif
   let arg3 = v:fname_out
   if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif
   if $VIMRUNTIME =~ ' '
     if &sh =~ '\<cmd'
       if empty(&shellxquote)
         let l:shxq_sav = ''
         set shellxquote&
       endif
       let cmd = '"' . $VIMRUNTIME . '\diff"'
     else
       let cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"'
     endif
   else
     let cmd = $VIMRUNTIME . '\diff'
   endif
   silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3
   if exists('l:shxq_sav')
     let &shellxquote=l:shxq_sav
   endif
 endfunction

ท่านสามารถเข้าดูเวอร์ชันเต็มของคุณในกลุ่มที่ใช้:versionหรือ:introคำสั่งหรือที่หน้าจอเริ่มต้นที่เริ่มต้น

แต่น่าเสียดายถ้าคุณต้องการการติดตั้งอย่างเป็นทางการคุณอาจจะต้องรอจนกว่าจะถึง 8.0 หรือติดตั้งคืนสร้าง แต่คุณสามารถติดตั้งเป็นกลุ่มจากสถานที่อื่น ๆหรือสร้างกลุ่มของคุณเอง


ทำซ้ำใน Stack Overflow (ผิดปกติบนหัวข้อในทั้งสองไซต์) หากคำตอบนี้ได้รับการอัปเดต


1
พบวิธีแก้ไขปัญหาบางอย่างบนเน็ตแล้ว แต่นี่เป็นโซลูชันเดียวที่เหมาะกับฉัน!
ysap

BTW - คุณจะบอก # ของรุ่นย่อยได้อย่างไร (เช่น 7.4.103)
ysap

สามวิธี: การเริ่มต้นบนบัฟเฟอร์ที่ว่างเปล่าแสดงข้อมูลเวอร์ชันรวมถึงระดับแพตช์:introคำสั่งจะแสดงข้อความเดียวกันและ:versionคำสั่งจะให้ข้อมูลในบรรทัด "รวมแพตช์รวม" :versionยังให้รายการที่มีรายละเอียดอย่างมากของคุณสมบัติที่รวมหรือแยกออกเช่นกัน
Ben

1
นอกจากนี้ Bram มักจะไม่ปล่อยตัวติดตั้งอย่างเป็นทางการหลังจากเวอร์ชันรองเริ่มต้นเช่น 7.4.0 แต่มีสถานที่มากมายที่จะได้รับตัวติดตั้งสำหรับกลุ่ม Vim ที่ใหม่กว่าถ้าคุณไม่รู้สึกว่าคอมไพล์การอ้างถึงส่วนใหญ่มักจะมาที่นี่: sourceforge.net/projects/cream/files/Vim
Ben

1
@Ben ฉันได้แก้ไขปัญหามันเป็นอย่างอื่นที่ทำให้เกิดเรื่องนี้และฉันเข้าใจผิดMyDiff()ว่าเป็นสิ่งที่จะใช้เมื่อใช้เป็นกลุ่มบน windows แต่สำหรับบางสิ่งบางอย่างสำหรับการใช้เป็นกลุ่มผ่าน cmd ฉันใช้เป็นกลุ่มผ่าน git bash ขอขอบคุณ.
Captain Man
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.