У меня проблемы с получением vimdiff
для работы на компьютере с Windows 10. Я бегу vim от Powershell. Powershell также объявлен в $myvimrc
как мой выбор:
set shell=C:\WINDOWS\system32\WindowsPowershell\v1.0\powershell.exe
Документы, которые я пытаюсь сравнить, не сохраняются в виде файлов. Я открываю два вертикальных разбиения, вводу текста в каждый и запускаю :windo diffthis
. Выход составляет E97: Cannot create diffs
.
В этой статье говорится, что мне может понадобиться загрузить и использовать diff.exe
, отличный от того, который установлен с gvim. Я скачал рекомендованный пакет "GnuWin32 diff" и добавил каталог установки в путь к Windows ($env:path
). Продолжая следовать этим указаниям, я закомментировал объявление diffexpr
по умолчанию, но все равно получаю E97.
Я также пытался вызвать свою собственную функцию, но безрезультатно. В этой попытке я избежал обратной косой черты, а также скопировал загруженный файл diff.exe
в каталог, к которому, я уверен, у меня есть полные разрешения. Чтобы помочь с устранением неполадок, я временно сохранил два файла, которые хочу сравнить, и указал их полные пути в явном виде вместо использования vim v:fname_in
и v:fname_new
(и v:fname_out
).
set diffexpr=TestDiff()
function TestDiff()
silent execute "!& " . "C:\\diff.exe" . " -a --binary " "C:\\a.edi" . " " . "C:\\b.edi" . " > " . "C:\\tmp.txt"
endfunction
Я исследовал эту ошибку, запустив :h E97
, который возвращает следующую информацию:
Vim выполнит тест, если вывод diff выглядит нормально. Если это не так,
вы получите сообщение об ошибке. Возможные причины:
- Программа "diff" не может быть выполнена.
- Программа "diff" не создает нормальные различия в стиле "ed" (см. Выше).
- «Оболочка» и связанные с ней параметры установлены неправильно. Попробуйте, если фильтрация работает с такой командой, как ":! Sort".
- Вы используете 'difxpr', и он не работает. Если не ясно, в чем проблема, установите параметр «verbose» на один или несколько, чтобы увидеть
больше сообщений.
Самостоятельно устанавливаемый Vim для MS-Windows включает программу diff. Если
у вас его нет, вы можете скачать diff.exe. Например
от http://gnuwin32.sourceforge.net/packages/diffutils.htm.
Я считаю, что я выполню первые два из этих требований, так как tmp.txt
генерируется и следует примеру diff в стиле "ed", приведенном в файле справки. Я не установил другие параметры, относящиеся к оболочке (тип оболочки, shellpipe и т. Д.), В $myvimrc
, но выполнение других команд с :!
завершено без проблем.
В :messages
нет дополнительной информации, только ошибка E97.
Edit:
Если я удаляю set shell=C:\WINDOWS\system32\WindowsPowershell\v1.0\powershell.exe
из $myvimrc
, по умолчанию возвращается значение cmd.exe
, diffthis
работает как положено. Кажется, что другие также имели эту проблему при использовании Powershell .
Ниже приведены снимки командных окон, которые появляются при запуске diffthis
с обеими оболочками. Используемые команды практически идентичны.
Я предположил, что прямые косые черты, видимые в версии Powershell для этой попытки, были проблематичными, но я могу точно выполнить эту команду (с фиктивными файлами вместо файлов .tmp), и она выдает то, что кажется подходящий файл для использования с diff. Я также попытался добавить substitute
прямой косой черты к обратной, но безрезультатно.