Это ошибка vim
.
Это не проблема, вопреки тому, что romainl
говорит в комментарии к вопросу, с cmd
вообще. Это никак не связано с cmd
. И cmd
и start
ведут себя так, как задумано.
Проблема в том, что vim
использует UTF-8 (см . :help unicode
.) Для хранения и манипулирования командной строкой и передает эту строку UTF-8 как есть программному API, который не принимает UTF-8 в первое место. В частности: заканчивается передача строки UTF-8 в функцию CreateProcessA()
. Но CreateProcessA()
принимает строки, закодированные в кодовой странице Windows . vim
должен предварительно преобразовать строку из UTF-8 в соответствующую кодовую страницу (или в Unicode и вместо этого вызвать CreateProcessW()
). Но это не так.
Как следствие, последовательность байтов в вашем пути UTF-8, созданная vim
из %:p:h
, обрабатывается CreateProcessA()
как если бы она была последовательностью байтов в кодовой странице Windows. Вы можете увидеть результат.
Там, вероятно, нет локального решения для этого. Использование 8.3 имен (:8
) не исправит это вообще. Но возиться с переменной vim
encoding
может до некоторой степени улучшить ее (хотя это повлияет не только на это и не является правильным способом решения проблемы). Тебе придется поговорить с Брэмом Муленааром. (Обращаясь к списку ошибок vim
7.3, я обнаружил, что вы также можете поговорить с этим человеком, хотя убедить М. Муленаара в том, что кикучан не одинок, все еще хорошая идея.)