Это ошибка 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, я обнаружил, что вы также можете поговорить с этим человеком, хотя убедить М. Муленаара в том, что кикучан не одинок, все еще хорошая идея.)