How to convert the ^M linebreak to 'normal' linebreak in a file opened in vim?

VimLine Breaks

Vim Problem Overview


vim shows on every line ending ^M

How I do to replace this with a 'normal' linebreak?

Vim Solutions


Solution 1 - Vim

Command

:%s/<Ctrl-V><Ctrl-M>/\r/g

Where <Ctrl-V><Ctrl-M> means type Ctrl+V then Ctrl+M.

Explanation

:%s

substitute, % = all lines

<Ctrl-V><Ctrl-M>

^M characters (the Ctrl-V is a Vim way of writing the Ctrl ^ character and Ctrl-M writes the M after the regular expression, resulting to ^M special character)

/\r/

with new line (\r)

g

And do it globally (not just the first occurrence on the line).

Solution 2 - Vim

On Linux and Mac OS, the following works,

:%s/^V^M/^V^M/g

where ^V^M means type Ctrl+V, then Ctrl+M.

Note: on Windows you probably want to use ^Q instead of ^V, since by default ^V is mapped to paste text.

Solution 3 - Vim

Within vim, look at the file format — DOS or Unix:

:set filetype=unix

:set fileformat=unix

The file will be written back without carriage return (CR, ^M) characters.

Solution 4 - Vim

This is the only thing that worked for me:

> :e ++ff=dos

Found it at: http://vim.wikia.com/wiki/File_format

Solution 5 - Vim

A file I had created with BBEdit seen in MacVim was displaying a bunch of ^M line returns instead of regular ones. The following string replace solved the issue - hope this helps:

:%s/\r/\r/g

It's interesting because I'm replacing line breaks with the same character, but I suppose Vim just needs to get a fresh \r to display correctly. I'd be interested to know the underlying mechanics of why this works.

Solution 6 - Vim

First, use :set ff? to figure out the file format your file is.

I guess it could be unix, then the problem is your file was created with fileformat=dos adding "^M^J" to the line end but read with flieformat=unix only removing the "^J" from the line end, leaving the "^M" there.

Just input :e ++ff=dos in Vim command line to change your file's format from unix to dos. It should solve the problem. If not, :%s/\r//g should help you out.

Solution 7 - Vim

in order to get the ^M character to match I had to visually select it and then use the OS copy to clipboard command to retrieve it. You can test it by doing a search for the character before trying the replace command.

/^M

should select the first bad line

:%s/^M/\r/g

will replace all the errant ^M with carriage returns.

This is as functions in MacVim, which is based on gvim 7.

EDIT:

Having this problem again on my Windows 10 machine, which has Ubuntu for Windows, and I think this is causing fileformat issues for vim. In this case changing the ff to unix, mac, or dos did nothing other than to change the ^M to ^J and back again.

The solution in this case:

:%s/\r$/ /g
:%s/ $//g

The reason I went this route is because I wanted to ensure I was being non-destructive with my file. I could have :%s/\r$//g but that would have deleted the carriage returns right out, and could have had unexpected results. Instead we convert the singular CR character, here a ^M character, into a space, and then remove all spaces at the end of lines (which for me is a desirable result regardless)

Sorry for reviving an old question that has long since been answered, but there seemed to be some confusion afoot and I thought I'd help clear some of that up since this is coming up high in google searches.

Solution 8 - Vim

None of these worked for me, so I tried this, which worked:

type :%s/

press CTRL-VCTRL-M

type //g

press Enter

So the overall command in Vim shoud look like :%s/^M//g

What this does: :%s (find and replace) /^M/ (that symbol) / (with no chars) g (globally).

Solution 9 - Vim

^M is retrieved by Ctrl+V and M, so do

s/^M//g

Solution 10 - Vim

Without needing to use Ctrl: :%s/\r$//

Solution 11 - Vim

Simple thing that worked for me

dos2unix   filename

Solution 12 - Vim

I did this with sed:

sed -i -e 's/\r/\n/g' filename

Solution 13 - Vim

What about just:

:%s/\r//g

That totally worked for me.

What this does is just to clean the end of line of all lines, it removes the ^M and that's it.

Solution 14 - Vim

There are many other answers to this question, but still, the following works best for me, as I needed a command line solution:

vim -u NONE -c 'e ++ff=dos' -c 'w ++ff=unix' -c q myfile

Explanation:

  • Without loading any .vimrc files, open myfile
  • Run :e ++ff=dos to force a reload of the entire file as dos line endings.
  • Run :w ++ff=unix to write the file using unix line endings
  • Quit vim

Solution 15 - Vim

Ctrl+M minimizes my window, but Ctrl+Enter actually inserts a ^M character. I also had to be sure not to lift off the Ctrl key between presses.

So the solution for me was:

:%s/<Ctrl-V><Ctrl-Enter>/\r/g

Where <Ctrl-V><Ctrl-Enter> means to press and hold Ctrl, press and release V, press and release Enter, and then release Ctrl.

If you are working on a Windows-generated file

The above solution will add an additional line between existing lines, because there is already an invisible \r after the ^M.

To prevent this, you want to delete the ^M characters without replacing them.

:%s/<Ctrl-V><Ctrl-Enter>//g

Where % means "in this buffer," s means "substitute," / means "(find) the following pattern," <Ctrl-V><Ctrl-Enter> refers to the keys to press to get the ^M character (see above), // means "with nothing" (or, "with the pattern between these two slashes, which is empty"), and g is a flag meaning "globally," as opposed to the first occurrence in a line.

Solution 16 - Vim

This worked for me:

  1. Set file format to unix (\n line ending)
  2. save the file

So in vim:

:set ff=unix
:w

Solution 17 - Vim

In my case,

Nothing above worked, I had a CSV file copied to Linux machine from my mac and I used all the above commands but nothing helped but the below one

tr "\015" "\n" < inputfile > outputfile

I had a file in which ^M characters were sandwitched between lines something like below

Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKT6TG,TRO_WBFB_500,Trico,CARS,Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKTG0A,TRO_WB_T500,Trico,

Solution 18 - Vim

Alternatively, there are open-source utilities called dos2unix and unix2dos available that do this very thing. On a linux system they are probably installed by default; for a windows system you can download them from http://www.bastet.com/ amongst others.

Solution 19 - Vim

sed s/^M//g file1.txt > file2.txt

where ^M is typed by simultaneously pressing the 3 keys, ctrl + v + m

Solution 20 - Vim

use dos2unix utility if the file was created on windows, use mac2unix utility if the file was created on mac. :)

Solution 21 - Vim

Use one of these commands:

:%s/\r//g

Or

:%s/\r\(\n\)/\1/g

Solution 22 - Vim

To save keystrokes, you can avoid typing Ctrl+VCtrl+M by placing this in a mapping. Just open a file containing a ^M character, yank it, and paste it into a line like this in your .vimrc:

nnoremap <Leader>d :%s/^M//g<CR>

Solution 23 - Vim

This worked for me:

:% s/\r\n/\r

Solution 24 - Vim

To use sed on MacOS, do this:

sed -i.bak $'s/\r//' <filename>

Explanation: The $'STRING' syntax here pertains to the bash shell. Macs don't treat \r as special character. By quoting the command string in $'' you're telling the shell to replace \r with the actual \r character specified in the ANSI-C standard.

Solution 25 - Vim

In command mode in VIM:

:e ++ff=dos | setl ff=unix | up

e ++ff=dos - force open file in dos format.

setl ff=unix - convert file to unix format.

up - save file only when has been modified.

Solution 26 - Vim

None of these suggestions were working for me having managed to get a load of ^M line breaks while working with both vim and eclipse. I suspect that I encountered an outside case but in case it helps anyone I did.

:%s/.$//g

And it sorted out my problem

Solution 27 - Vim

:g/^M/s// /g

If you type ^M using Shift+6 Caps+M it won't accept.

You need to type ctrl+v ctrl+m.

Solution 28 - Vim

^M gives unwanted line breaks. To handle this we can use the sed command as follows:

sed 's/\r//g'

Solution 29 - Vim

Just removeset binary in your .vimrc!

Solution 30 - Vim

On Solaris:

> :%s///g

that is:

> :%s/^M//g

That means:

  • % = all lines,
  • s = substitute,
  • ^M = what you desire to substitute
  • // = replace with nothing
  • g = globally (not only the first occurrance)

Solution 31 - Vim

" This function preserves the list of jumps

fun! Dos2unixFunction()
let _s=@/
let l = line(".")
let c = col(".")
try
    set ff=unix
    w!
    "%s/\%x0d$//e
catch /E32:/
    echo "Sorry, the file is not saved."
endtry
let @/=_s
call cursor(l, c)
endfun
com! Dos2Unix keepjumps call Dos2unixFunction()

Solution 32 - Vim

I've spent an afternoon struggling with \n ctrl-v 012 (both of which supply me with null). & laboured through this thread until I reached metagrapher's.

\r worked fine for me!

/),/s/),/)\r/g

turned something like this:

>blacklist-extra:i386 (0.4.1, 0.4.1+nmu1), libmount1:i386 (2.20.1-5.1, 2.20.1 -5.2), libblkid1:i386 (2.20.1-5.1, 2.20.1-5.2), libapt-pkg4.12:i386 (0.9.7.4 , 0.9.7.5), nmap:i386 (6.00-0.1, 6.00-0.2), libsane-common:i386 (1.0.22-7.3,

into something like this:

> 26 libwv-1.2-4:i386 (1.2.9-3, automatic)
> 27 openjdk-6-jre-headless:i386 (6b24-1.11.4-3, automatic)
> 28 jed:i386 (0.99.19-2.1)

Magic. I am profoundly grateful

Solution 33 - Vim

Or instead of using vim you can just fix the line breaks using this command

fromdos <filename.txt>

Hope it helps!

Solution 34 - Vim

None of the above worked for me. (substitution on \r, ^M, ctrl-v-ctrl-m ) I used copy and paste to paste my text into a new file.

If you have macros that interfere, you can try :set paste before the paste operation and :set nopaste after.

Solution 35 - Vim

In vim, use command:
> :%s/\r\n/\r/g

Where you want to search and replace: > \r\n

into > \r

and the > /g

is for global

Note that this is the same as the answer by @ContextSwitch but with the gobal flag

Solution 36 - Vim

Over a serial console all the vi and sed solutions didn't work for me. I had to:

cat inputfilename | tr -d '\r' > outputfilename

Solution 37 - Vim

When in windows, try :%s/<C-Q><C-M>/g

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionByteNirvanaView Question on Stackoverflow
Solution 1 - VimLeopardSkinPillBoxHatView Answer on Stackoverflow
Solution 2 - VimPaul TomblinView Answer on Stackoverflow
Solution 3 - VimJonathan LefflerView Answer on Stackoverflow
Solution 4 - VimPamView Answer on Stackoverflow
Solution 5 - VimnetpoeticaView Answer on Stackoverflow
Solution 6 - VimchenxsanView Answer on Stackoverflow
Solution 7 - VimMetagrapherView Answer on Stackoverflow
Solution 8 - Vimd-_-bView Answer on Stackoverflow
Solution 9 - VimAndrew SledgeView Answer on Stackoverflow
Solution 10 - VimBHarmanView Answer on Stackoverflow
Solution 11 - VimShahzeb KhanView Answer on Stackoverflow
Solution 12 - VimFreedom_BenView Answer on Stackoverflow
Solution 13 - VimTonatiuhView Answer on Stackoverflow
Solution 14 - VimMicah SmithView Answer on Stackoverflow
Solution 15 - VimCrannDarachView Answer on Stackoverflow
Solution 16 - VimStrykerView Answer on Stackoverflow
Solution 17 - VimVishwanath gowda kView Answer on Stackoverflow
Solution 18 - VimConcernedOfTunbridgeWellsView Answer on Stackoverflow
Solution 19 - VimBlue DiamondView Answer on Stackoverflow
Solution 20 - VimRameshView Answer on Stackoverflow
Solution 21 - VimMuhammad RedaView Answer on Stackoverflow
Solution 22 - VimagougeView Answer on Stackoverflow
Solution 23 - VimContextSwitchView Answer on Stackoverflow
Solution 24 - VimNitin NainView Answer on Stackoverflow
Solution 25 - VimVictor S.View Answer on Stackoverflow
Solution 26 - VimrogermushroomView Answer on Stackoverflow
Solution 27 - VimShravan KumarView Answer on Stackoverflow
Solution 28 - VimManoj KumarView Answer on Stackoverflow
Solution 29 - VimfalcucciView Answer on Stackoverflow
Solution 30 - VimDonato PirozziView Answer on Stackoverflow
Solution 31 - VimSergioAraujoView Answer on Stackoverflow
Solution 32 - Vimuser1997684View Answer on Stackoverflow
Solution 33 - VimbsmooView Answer on Stackoverflow
Solution 34 - VimstatueofmikeView Answer on Stackoverflow
Solution 35 - VimmarkykView Answer on Stackoverflow
Solution 36 - VimrobsnView Answer on Stackoverflow
Solution 37 - VimjiangdongziView Answer on Stackoverflow