У меня возникли проблемы с запуском 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
в каталог, на который, как я уверен, у меня есть полные права. Чтобы помочь в устранении неполадок, я временно сохранил два файла, которые хочу сравнить, и явно указал их полные пути, а не использовал v:fname_in
и v:fname_new
(и v:fname_out
) vim.
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".
- Вы используете «diffexpr», и это не работает. Если неясно, в чем проблема, установите для параметра «Подробный» значение одно или несколько, чтобы увидеть больше сообщений.
Самоустанавливающийся Vim для MS-Windows включает в себя программу сравнения. Если у вас его нет, вы можете скачать diff.exe. Например, из http://gnuwin32.sourceforge.net/packages/diffutils.htm .
Я полагаю, что удовлетворяю первые два из этих требований, поскольку tmp.txt
генерируется и соответствует примеру различий в стиле "ed", приведенному в файле справки. Я не устанавливал другие параметры, связанные с оболочкой (shelltype, shellpipe и т. д.) в $myvimrc
, но выполнение других команд с :!
завершается без проблем.
В :messages
никакой дополнительной информации нет, только ошибка Е97.
Изменить: если я удалю set shell=C:\WINDOWS\system32\WindowsPowershell\v1.0\powershell.exe
из $myvimrc
, вернув оболочке значение cmd.exe
по умолчанию, diffthis
будет работать как положено. Похоже, что у других также возникла эта проблема при использовании Powershell. а>.
Ниже приведены снимки командных окон, которые появляются при запуске diffthis
с обеими оболочками. Используемые команды почти идентичны.
Я предположил, что косая черта, очевидная в версии Powershell этой попытки, была проблематичной, но я могу точно запустить эту команду (с фиктивными файлами вместо файлов .tmp), и она выводит то, что кажется подходящим файлом для использовать с диф. Я также пытался добавить substitute
косой черты к обратной косой черте, но безрезультатно.
:diffthis
отлично работала для меня, когда я запускал gvim из интерактивных значков. Он также отлично работал, когда я запускал его из PowerShell. Мне не нужно было устанавливать какие-либо переменные или что-то еще. Есть ли у вас какая-либо пользовательская конфигурация, которая может конфликтовать с vim? - person joanis   schedule 11.06.2019diffopt
включаетinternal
- person Christian Brabandt   schedule 12.06.2019shell
как Powershell. - person root   schedule 13.06.2019