Эта проблема может быть вызвана файлом _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
или на заставке при запуске.
К сожалению, если вам нужен официальный установщик, вам придется подождать до 8.0 или установить ночную сборку. Тем не менее, вы можете установить Vim из других мест или создать свой собственный Vim.
Дублируется при переполнении стека (необычно, по теме на обоих сайтах), если этот ответ обновляется, то же самое следует делать и с другим.