gVim showing carriage return (^M) even when file mode is explicitly DOS

半腔热情 提交于 2019-11-28 13:21:03

问题


I'm using gVim on Windows. My code shows ^M characters at the end of lines. I used :set ff=dos to no avail. The ^M characters remain for existing lines, but don't show up for newlines I enter. I've switched modes to mac (shows ^J characters) and unix (also shows ^M characters) and back to dos. Has anyone else seen this?


回答1:


This happens when you have a mixture of Windows line endings and Unix ones. If you have 100 lines, 99 are \r\n and one is \n, you'll see 99 ^M characters. The fix is to find that one line and replace it. Or run dos2unix on the file. You can replace the Windows line endings with:

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




回答2:


You can also run:

:e ++ff=dos

To remove the ^M: See File format – Vim Tips Wiki.




回答3:


I usually use the following to cleanup my line endings:

:g/^M$/s///

To get the ctrl-M I usually type ctrl-Q, then ctrl-M and it puts it in. (In some environments it may be ctrl-V then ctrl-M.) I don't know why, but I find that one easier to remember than rq's.

Don't forget to do :set ff=dos as well, or you'll end up saving with UNIX line endings still.




回答4:


I know this has already been answered, but a trick I use is

:%s/\r/\r/g

This replaces the unix carriage returns with the windows CRLF. Just added in case anyone else had issues.




回答5:


You can ignore these chars!

put this into your vimrc

match Ignore /\r$/




回答6:


Actually what worked for me (on 64-bit windows, gVIM: 7.2 ) was:

:set ffs=dos

not just: ff




回答7:


Running Vim 7.3 on Windows 7. I used the following command:

:%s/^M/\r/g

To create the ^M I typed in CTRL+Q then CTRL+M.




回答8:


This is probably a bit simple for many of you but on the off chance it's useful.

Based on richq's answer, I found these to be useful in my vimrc. Note, the second one is commented out normally because it makes dd a bit confusing since Vim will wait for another key stroke to work out if it's the mapped ex command.

function! D2u()
    execute '%s/\r\(\n\)/\1/g'
endfunction
"map d2u :%s/\r\(\n\)/\1/g

The first is run by typing call D2u() into ex and the second by pressing D2u in edit mode.




回答9:


These are extra CR line endings usually because of a using a file on mixed UNIX/DOS systems.

Possible the shortest answer to remove a single ^M from the end of each line, and what I use, is:

:%s/\r

which is equivalent to:

:%s/\r//

but the end slashes aren't required (they're assumed).




回答10:


tried a lot of things but the following worked

:%s/\r/\r/g

note: use g if you want the effect on the whole file



来源:https://stackoverflow.com/questions/799417/gvim-showing-carriage-return-m-even-when-file-mode-is-explicitly-dos

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!