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