Ответ 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 по умолчанию, если вы хотите получить последнюю инкарнацию этой функции.
Скопировано из моего ответа на этот тот же вопрос о Суперпользователе.