11

On Solaris, if you open a file in vi that has Windows line endings, this shows up as ^M at the end of every line.

On Linux, vi is cleverer and understands the Windows file format, and does not display ^M.

Is there a setting to make Linux vi behave the same as Solaris in this respect?

A common problem for us is copying a shell script off a (Windows) dev box and forgetting to dos2unix it, and then being confused when it doesn't work properly. On Solaris the problem is obvious as soon as you vi the file, but not on Linux.

Thanks.

2
  • On Linux, vi is usually Bram Moolenaar's vim, I expect the vi on Solaris is the Bill Joy vi, original, authentic but less capable. Nov 16, 2011 at 10:04
  • On my vim, by default I usually see no ^M, but sometimes there is one at the end of the file.
    – trysis
    Mar 23, 2017 at 19:06

3 Answers 3

10

Try :set ffs=unix when starting vi (or set as default in vimrc) which should display all CR characters as ^M.

vi auto-guesses which format to use based on whether or not it encounters lines ending in just LF or both CR/LF.

5
  • 2
    @RedGrittyBrick - On my system, :set list shows $ at the end of all lines (Unix & DOS format), so doesn't help distinguish between the two.
    – sss
    Nov 16, 2011 at 9:36
  • @sss: My mistake, I'll delete the comment. Nov 16, 2011 at 10:00
  • 3
    @gman - this command didn't work for me precisely - I got Not an editor command: ffs=unix - but set me on the right path. Running :set ffs=unix with the file open in vi didn't work - no error but nothing happened. I put set ffs=unix in my .vimrc file and that worked.
    – sss
    Nov 16, 2011 at 10:09
  • 1
    I experienced exactly the same thing as @sss
    – SSH This
    May 2, 2013 at 21:58
  • Thus corrupts the carefully prepared user configuration. I most likely want the ffs exactly the way it is. But see the answer from @wisbucky.
    – fork0
    Sep 13, 2018 at 13:20
3

To show dos line endings for the current file:

:e +ff=unix

This forces the fileformat to unix, which will render CR as ^M


To make this setting permanent, add to ~/.vimrc:

set ffs=unix

Note that the .vimrc setting is ffs, not ff.

1
  • This should be :e ++ff=unix, I believe.
    – fork0
    Sep 13, 2018 at 13:21
0

:e ++ff=unix

(per fork0) 54321

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.