1

Я использую Vim 7.3 под Windows 7 и столкнулся с проблемой. Символы ^M не исчезают, несмотря на все мои усилия :e ++ff=dos не помогает.

Какие-либо предложения?

2 ответа2

2

^ M обычно появляются, когда файл не соответствует используемым терминаторам строки. Попробуйте следующее:

  • Создайте testfile используя vim с несколькими случайными строками, и запишите его в режиме dos.
  • Затем запустите (надеюсь, у вас установлен Cygwin):

     sed '2s/.$//' testfile > corruptfile
    

    Это удалит последний символ второй строки, создав несогласованность в используемых терминаторах строки.

  • Откройте corruptfile с помощью vim. Символы ^ M появятся, чтобы вы знали о несоответствии.

В реальной жизни программы, написанные с использованием одного типа ограничителя строки, могут привести к таким несоответствиям. Хотя эти несоответствия кажутся невинными, они могут вызвать проблемы с другими программами. Например, subversion не позволяет добавлять в репозиторий файл с несовместимыми терминаторами строк. Другие программы могут просто молча провалиться.

Чтобы ^ M исчезло, просто сделайте глобальную замену:

:% s/^M//g

^M производится нажатием: Ctrl+v <Enter>

Затем запишите файл в нужном формате:

:set ff=dos
:w
1

Символ, который vim отображает как ^ M, является CR (возврат каретки, символ ASCII 13). Windows использует как CR и LF (новая строка, символ ASCII 10) для кодирования разрывов строк в текстовых файлах. Linux/Unix использует только LF для кодирования разрывов строк, а Mac OS использует только CR .

Если вы откроете текстовый файл, созданный на компьютере с Windows в окне Linux, вы можете увидеть конечные символы CR в каждой строке. Есть несколько способов их удалить. Один - заменить их в vim, как предложил m000, другой - recode файл:

recode ibmpc..latin1 SOME.TXT

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