3

В Vim я могу открыть каталог активного файла с помощью этой команды:

:silent ! start %:p:h

Тем не менее, если каталог содержит специальные символы (например, скандинавские буквы), я получаю сообщение об ошибке. Ниже приведена ссылка на пример.

Ошибка говорит что-то вроде «Не могу найти цель. Пожалуйста, убедитесь, что вы написали это правильно, и попробуйте еще раз. "(По-фински). Каталог в приведенном выше примере - D:\ ölöälä, но, как вы можете видеть, буквы ö и ä не отображаются должным образом в cmd. Я думаю, что это вызывает ошибку.

Как я могу решить это? Я на 64-битной Win 7.

1 ответ1

4

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .