Windows 7'de Vimdiff (7.4) çalıştırılamıyor


29

Geçenlerde Windows 7 makinede gVim 7.4 sürümünü kurdum. Windows Gezgini'ndeki içeriğe duyarlı menüden iki dosyayı dağıtmaya çalışıyorum, hata mesajları alıyorum:

E810: Geçici dosyalar okunamıyor veya yazılamıyor
E97: Farklılıklar oluşturulamıyor

Seçilen iki dosya iki bölmeli gVim görünümünde açılır ve editör diff modunda görünür, ancak gerçek farklar vurgulanmamıştır.

%TEMP%Ve %TMP%ortam değişkenleri geçerli bir dizin adı ile doldurulur.

Dosyaları normal bir gVim oturumunda açıp :diffthiskomut istemine yazarken aynı cevabı alıyorum .

Bu Vim 7.3 ile düzgün çalışmak için kullanılan, ancak v7.4 de bir şey değişmiş gibi görünüyordu.

İki dosyayı nasıl dağıtabilirim?

Yanıtlar:


45

Bu sorun, Windows'ta yükleyici tarafından oluşturulan varsayılan _vimrc dosyasından kaynaklanabilir. Hala bu varsayılan dosyayı kullanıyorsanız veya bir noktada kopyaladıysanız, diffexprseçeneğe atadığınız işlevi kontrol edin . Vim 7.3 ile 7.4 arasındaki düzeltme eklerinden biri, Windows'ta cmd.exe kabuğu için yeni varsayılan alıntı kuralları getirdi. Bu düzeltme eki, düzeltme eki tarafından çözülen aynı sorunu gidermek için tasarlanmış MyDiff () işlevindeki geçici çözümü bozdu.

MyDiff () işlevi, yükleyiciyi sabitleyerek 7.4.103 sürümünde düzeltildi. İşte, sadece _vimrc'nize kopyalamak istiyorsanız, en son yükleyicinin sizin için yaratacağı MyDiff () işlevi:

 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

Tam sürümünüzü Vim'de :versionveya :introkomutlarını kullanarak veya başlangıçtaki açılış ekranından görebilirsiniz.

Maalesef resmi bir kurucu istiyorsanız, 8.0'a kadar beklemeniz ya da bir gece kurmanız gerekecek . Bununla birlikte, Vim'i başka yerlerden yükleyebilir veya kendi Vim'inizi oluşturabilirsiniz .


Bu cevap güncellendiğinde Yığın Taşması üzerine çoğaltılmıştır (alışılmadık şekilde her iki sitede de konuyla ilgili).


1
Net üzerinden birkaç çözüm buldum, ancak bu benim için çalışan tek şey!
saat

BTW - alt sürümün sayısını nasıl söyleyebilirsiniz (örn. 7.4.103)?
Ocak'ta

Üç yol: boş bir tamponda başlatma, yama seviyesi de dahil olmak üzere sürüm bilgisini gösterir, :introkomut aynı metni gösterir ve :versionkomut "dahil edilmiş yamalar" satırında bilgi verir. :versionayrıca içerilen veya dışlanan özelliklerin çok ayrıntılı bir listesini verir.
Ben

1
Ayrıca, Bram genellikle ilk küçük sürümden sonra resmi kurucuları serbest bırakmaz, örneğin 7.4.0. Ancak derleme yapmak istemiyorsanız, daha sık kullanılan bir Vim için bir yükleyici edinecek çok fazla yer var, muhtemelen en çok burada belirtilenler: sourceforge.net/projects/cream/files/Vim
Ben

1
@Ben sorunu düzelttim, buna neden olan başka bir şeydi ve bunu MyDiff()pencerelerde vim kullanırken kullanacağım bir şey olduğunu yanlış anladım , ama cmd'den vim kullanmak için bir şey için, git bash aracılığıyla vim kullanıyorum. Teşekkür ederim.
Kaptan Adam,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.