Vim显示文件末尾的换行符

43
使用 set eol 选项,Vim 在文件保存时会自动在文件末尾添加一个换行符。我已经开启了此选项,但我希望在 Vim 中能够看到这个换行符,以便确认它实际上存在。

例如,在 Vim 中打开文件:Vim 截图

同一个文件在 TextMate 中:TextMate 截图

这总是让我迷惑,最终导致我添加第二个新行,并在后来意识到这一点。同样的问题已经在这里发布过,但被接受的答案没有回答这部分问题。
使用set list List 截图

我可以看到一个 $ 字符表示最后一行之后有一个换行符,但这也会污染其余文件。我知道我可以为此设置一个切换开关,但我真的更喜欢 TextMate 的行为。

波浪线(~)的意思是不换行。这不足够吗? - Billy Chan
4
@BillyChan,我希望你能确保末尾有一个新行。屏幕截图中已经有了一个新行,即使在同一行上有一个波浪号,这看起来并不太合理? - Keith Smiley
我个人会觉得看到 $ 很困惑,所以我不会去研究它 :) 看看其他人是否有好的答案给你。 - Billy Chan
1
是的,我也不喜欢那个。 - Keith Smiley
1
@BillyChan,波浪号(~)并不表示没有换行。如果最后一行末尾有换行符,它仍然会在下一行显示波浪号(就像第一张图片中的情况)。 - Nathan Hinchey
备选方案:在状态栏中显示 [noeol] 标志 https://vi.stackexchange.com/questions/18238/how-to-show-noeol-flag-in-custom-statusline - Flux
1个回答

16

'endofline'默认打开,因此您不需要在~/.vimrc中使用它。

EOL或“newline”并非意味着“这里之后有一个空行”,它的意思是“这标志着本行的结尾,任何进一步的字符都将显示在另一行上”。 "newline"!=“new line”。

您的文件的最后一行是#21,并以“换行符”结束。由于该“换行符”字符之后没有实际行,也就是没有第22行,因此显示第22行不仅是错误的,而且是具有误导性的。

TextMate的行为是错误的。

Vim的行为是正确的。

如果要让Vim显示第22行,则需要显式添加该行,但我认为这听起来相当愚蠢。


11
需要注意的一点是,这种行为不仅适用于TextMate,而是所有原生的OS X文本编辑器。 - Keith Smiley
12
虽然正确,但这种行为的问题在于,除非底部状态栏中有[noeol]标记(很难注意到),否则人类读者无法轻易找出文件的最后一行是否有结束符。更糟糕的是,几乎所有Win/Mac下的图形用户界面文本编辑器都采用另一种方式:将换行符视为行分隔符而不是行终止符,因此文件末尾周围的视觉外观直接告诉用户结束符的存在(或不存在)。 - neverhoodboy
19
TextMate的行为一点也不错!全世界的编辑器都会显示vim不显示的空行! - Iulian Onofrei
7
有没有办法配置vim来显示最后一行?我的意思是将其配置为像大多数Win/Mac编辑器那样“不正确”地工作? 放下什么是对的和错的。 - 4LegsDrivenCat
5
我说,“不管是对还是错,先放一边”。 - 4LegsDrivenCat
显示剩余15条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接