Подтвердить что ты не робот

Ошибка Vimdiff с "Невозможно прочитать или написать временные файлы"

Я использую Vim 7.4 в Windows 7.

У меня есть собственный файл _vimrc, но оба Vim и gVim работают нормально. Когда я пытаюсь запустить vimdiff .\xxxxx .\yyyyy, он дает ошибку

Невозможно прочитать или написать временные файлы

4b9b3361

Ответ 1

Эта проблема может быть вызвана файлом _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

Вы можете увидеть свою полную версию в Vim с помощью команд :version или :intro или на заставке при запуске.

Теперь доступен официальный установщик Vim 8.0, или вы можете установить ночная сборка, установить Vim из других мест или создать собственный Vim. Установка с помощью любого из этих методов должна предоставить вам последний файл vimrc по умолчанию, если вы хотите получить последнюю инкарнацию этой функции.

Скопировано из моего ответа на этот тот же вопрос о Суперпользователе.

Ответ 2

Я получал эту точную ошибку и бесполезно искажался с разрешениями на set backupdir.

Но потом я вспомнил, что недавно я перешел на Windows 7 и использовал Cygwin 64 и забыл переупорядочить следующую настройку.

set shell=c:\\cygwin64\\bin\\zsh.exe shellcmdflag=-c shellxquote=\"

И эй, прежде чем ошибка исчезла, и теперь работает:

gvim -d v1.php v2.php

Так что эта ошибка действительно говорит, что я не могу найти вашу оболочку или cmd!

Ответ 3

Добавление:

set shell = c:\cygwin64\bin\ bash.exe

для моего _vimrc работал у меня.

Ответ 4

Я также получал сообщения

E810: Невозможно прочитать или написать временные файлы
E97: невозможно создать diffs

Однако мой файл _vimrc был в порядке.

Проблема заключалась в том, что C:\Program Files\Vim\vim74 не было в переменной среды PATH, поэтому Vim не смог запустить diff.exe.

Ответ 5

Я установил Vim 8.0 в Windows 7. После добавления каталога, связанного с vim, с моей переменной PATH "diffthis" и т.д., работал из коробки, если вызывается из командной строки CMD. Но вызов gvim из cygwin bash привел к ошибке "E97: невозможно создать diff".

Следующий _vimrc (вдохновленный this и этот пост) решил проблему с cygwin, а также работает с командной строкой 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"

Обратите внимание, что с помощью _vimrc выше вы теряете gvim зависящее от Windows поведение, например, используя CTRL-V для вставки и т.д. (вы можете использовать SHIFT-Ins в любом случае). Но с включенным зависящим от Windows поведением (как в сгенерированном _vimrc во время установки) gvim не смог выполнить "diffthis" с ошибкой "E97:...".