Converting text files from DOS to UNIX with vi
^M character stands for a carriage return in Vim (
<c-m> or just
<CR>). Vim displays this character when at least on line in the file uses
LF line endings. In other words, when Vim consider a file to have
fileformat=unix but some lines do have carriage returns (
CR), the carriage returns are displayed as
A file that has a single line with
LF line ending and several lines with
CRLF line endings is most often created by wrongly editing a file created on a MSDOS based system. For example, by creating a file under an MSDOS operating system, copying it to a UNIX based system, and then prepending a hash-bang sting (e.g.
#!/bin/sh) using tools on the UNIX based operating system.
Converting a DOS Text file to a UNIX Text file
Quite often you have a file which was edited within DOS or Windows and you are viewing it under UNIX. This can look like the following when you view the file with vi.
If you wish to remove the ^M, it can be that you delete each ^M by hand. Alternatively, in vi after hitting Esc you can enter the following at the command mode prompt:
Where ^M is entered with Ctrl and v together and then Ctrl and m together.
This executes the command from the first line '1' to the last line '$', the command is to substitute 's' the '^M' for nothing '' and to this globally 'g'.
Using VIm's fileformat
When Vim opens a file with
<CR><NL> line endings (common on MSDOS based operating systems, also called
CRLF) it will set
dos, you can check what with:
To convert it to
<NL> line endings (common on most UNIX based operating systems, also called
LF) you can change the
fileformat setting and Vim will change the buffer.