>我们的第一个文件包含“hi”作为文本.
>我们的第二个文件包含“hi”作为文本.
当我们在gedit,vi或vim中打开这两个文件时,这两个文件在各个方面都是视觉上相同的.
>我们的第一个文件的十六进制内容为:6869
>我们的第二个文件的十六进制内容为:6869 0a
啊哈!有一个看不见的换行符.在vim中,如果我们足够关注状态栏,碰巧了解[noeol]的意思,那么我们可能会接受这一点,但是在gedit中,两个文件打开完全一样!
在一个小的调查中,当我要求人们使用gedit或vim来区分这两个文件时,他们在100%的时间内失败了.当我要求他们使用leafpad或emacs完成相同的任务时,他们在100%的时间内成功了.
我知道vi和gedit想要为他们创建的每个文件添加一个换行符(我承认这可能有优势).我不明白的是为什么gedit和vim觉得用户隐藏这个换行符是有益的吗?特别是当这种行为有潜在的极大破坏性时
(Take for instance the two C-programmers who see the contents of these two files the same in their vi/gedit text editor,and then assuming what they see is what they get,go on to write the contents into the array
char greeting[2]
. The first programmer writing the first file – although a bit sloppy with his code – goes on to fame and fortune,but the second programmer writing the second file,dies in miserable poverty,confused and bewildered by this invisible (and preventable) stack overflow.)
所以请告诉我们,vim和gedit这样的文本编辑器在他们创建的每个文档的末尾添加不可见的换行符的优点是什么,然后继续隐藏用户的这些换行符,以便这些文件的真实内容才可见可以使用其他文本编辑器检测?
解决方法
许多人(特别是Unix背景)认为,文本文件应该始终以换行符结尾(例如参见Why should files end with a newline?),任何允许创建文件的文本编辑器都将被彻底打破.从这个角度来看,Vim中没有额外的空行只能与这个世界观相一致.文件出现在编辑器中,就像它在终端中一样.
从Vim的角度来看,一个缺少换行符的文件是邪教和缺陷的;这就是为什么它被加载的[noeol]消息指示(并且很难编辑文件,同时保持缺少的换行符;虽然我已经写了PreserveNoEOL plugin来帮助).