39
votes

Using the set eol option Vim automatically adds a newline to the end of the file when it's saved. I have this option on but I would like to be able to see this newline in Vim, so I know that it's actually there.

For example with a file in Vim: Vim screenshot

And the same file in TextMate: TextMate screenshot

This always tricks me and I end up adding a second new line and end up realizing later. This exact same question was posted here but the answer that was accepted didn't answer this portion of the question.

Using set list: List screenshot

I can see there is a $ character denoting a new line after the last line but this also litters the rest of the file with these. I know I could set up a toggle for this but I'd really prefer the TextMate like behavior.

1
The tidle(~) means no new line. Isn't that enough? - Billy Chan
@BillyChan I want to see that there is a new line at the end. Which there is in the screenshots, even though there is a tilde on the same line, so that doesn't make much sense? - Keith Smiley
I myself would find seeing $ very confusing so I would not bother with that:) See if other guys has good answer for you. - Billy Chan
Yea I don't like that either. - Keith Smiley
@BillyChan the tilde (~) does not mean no new line. If there is a newline at the end of the last line, it would still show a tilde on the next line. (As in the first picture) - Nathan Hinchey

1 Answers

16
votes

'endofline' is on by default so you don't need it in your ~/.vimrc.

EOL or "newline" doesn't mean "there's an empty line after here", it means "this marks the end of the line, any further characters are to be displayed on another line". "newline" != "new line".

The last line of your file is #21 and it ends with a "newline" character. Since there's no actual line after that "newline" character, no line #22, showing a line #22 is not only wrong but misleading.

TextMate's behavior is wrong.

Vim's behavior is correct.

If you want Vim to show a line #22, you'll need to explicitly add that line but it sounds rather silly to me.