J'utilise Vim 7.4 sur Windows 7.
J'ai un fichier _vimrc personnalisé, mais Vim et gVim fonctionnent correctement. Lorsque j'essaie d'exécuter vimdiff .\xxxxx .\yyyyy
, cela donne l'erreur
Impossible de lire ou d'écrire des fichiers temporaires
Ce problème peut être dû au fichier _vimrc par défaut créé par le programme d'installation sous Windows. Si vous utilisez toujours ce fichier par défaut ou si vous l'avez copié à un moment donné, vérifiez la fonction que vous avez attribuée à l'option diffexpr
. L'un des correctifs entre Vim 7.3 et 7.4 a introduit de nouvelles règles de cotation par défaut pour le shell cmd.exe sous Windows. Ce correctif a rompu la solution de contournement dans la fonction MyDiff () conçue pour résoudre le même problème résolu par le correctif.
La fonction MyDiff () a été corrigée par la version 7.4.103 en corrigeant le programme d'installation. Voici la fonction MyDiff () que le dernier programme d'installation créera pour vous si vous souhaitez simplement le copier sur votre _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
Vous pouvez voir votre version complète dans Vim à l'aide des commandes :version
ou :intro
ou sur l'écran de démarrage au démarrage.
Le programme d'installation officiel de Vim 8.0 est maintenant disponible ou vous pouvez installer un construction nocturne , installer Vim depuis d'autres emplacements ou construire votre propre Vim . L'installation avec l'une de ces méthodes devrait vous permettre d'obtenir le dernier fichier vimrc par défaut si vous souhaitez récupérer la dernière incarnation de cette fonction.
Ajouter:
définir Shell = c:\cygwin64\bin\bash.exe
à mon _vimrc a travaillé pour moi.
J'obtenais cette erreur exacte et j'avais inutilement manipulé les autorisations sur le jeu backupdir.
Mais ensuite, je me suis rappelé que j'avais récemment changé pour Windows 7 et que j'utilisais Cygwin 64 et que j'avais oublié de refaire le réglage suivant.
set Shell=c:\\cygwin64\\bin\\zsh.exe shellcmdflag=-c shellxquote=\"
Et hop, l'erreur est partie et voici ce qui fonctionne maintenant:
gvim -d v1.php v2.php
Donc ce que cette erreur dit vraiment, c'est que je ne trouve pas votre Shell ou votre cmd!
J'ai installé Vim 8.0 sur Windows 7. Après avoir ajouté le répertoire contenant vim à ma variable PATH "diffthis", etc. s’appelait, s’il était appelé à partir d’une ligne de commande CMD. Mais appeler gvim depuis un compte cygwin bash a entraîné l’erreur "E97: ne peut pas créer diff".
Le _vimrc suivant (inspiré par this et ce post ) a résolu le problème avec cygwin et fonctionne également avec la ligne de commande Windows:
runtime vimrc_example.vim
" Change path to bash with your workstation specific path
set Shell=C:\Programme\cygwin\bin\bash
" Override value of TMP from cygwin (normally set to /tmp)
let $TMP="c:/tmp"
Notez qu'avec le _vimrc ci-dessus, vous perdez le comportement spécifique à Windows de gvim, comme utiliser CTRL-V pour coller, etc. (vous pouvez utiliser SHIFT-Ins de toute façon). Mais avec le comportement activé spécifique à Windows (comme dans _vimrc généré lors de l'installation), gvim n'a pas réussi à exécuter la commande "diffthis" avec l'erreur "E97: ...".
Je recevais aussi les messages
E810: Impossible de lire ou d'écrire des fichiers temporaires
E97: Impossible de créer des diffs
Cependant, mon fichier _vimrc allait bien.
Le problème était que C:\Program Files\Vim\vim74
n'était pas dans la variable d'environnement PATH, donc Vim n'a pas pu lancer diff.exe
.