假设我们有两个文本文档:
- 我们的第一个文件包含“
hi
”作为文本。 - 我们的第二个文件包含“
hi
”作为文本。
当我们在 gedit、vi 或 vim 中打开这两个文件时,这两个文件在各个方面在视觉上都是相同的。
但是,当我们xxd
在文件上运行时,我们会得到以下信息:
- 我们第一个文件的十六进制内容如下:
6869
- 我们的第二个文件的十六进制内容为:
6869 0a
啊哈!有一个看不见的换行符。在 vim 中,如果我们足够密切地关注状态栏并且碰巧理解了它的[noeol]
含义,那么我们可能会理解这一点,但在 gedit 中,两个文件打开的完全一样!
在一项小型调查中,当我要求人们仅使用 gedit 或 vim 来区分这两个文件时,他们 100% 的时间都失败了。当我要求他们使用 Leafpad 或 emacs 完成相同的任务时,他们 100% 的成功。
我知道 vi 和 gedit 想在他们创建的每个文件中添加一个换行符(我承认这可能有好处)。我不明白为什么 gedit 和 vim 认为在视觉上对用户隐藏这个换行符是有益的?尤其是当这种行为具有潜在的极具破坏性时……
(例如,两个 C 程序员在他们的 vi/gedit 文本编辑器中看到这两个文件的内容相同,然后假设他们看到的是他们得到的,继续将内容写入数组
char greeting[2]
。第一个编写第一个文件的程序员——尽管他的代码有点草率——继续名利双收,但是编写第二个文件的第二个程序员死于悲惨的贫困中,被这种看不见的(和可预防的)堆栈溢出弄糊涂了。)
所以请告诉我,像 vim 和 gedit 这样的文本编辑器在他们创建的每个文档的末尾添加不可见的换行符有什么好处,然后继续对用户隐藏这些换行符,以便这些文件的真实内容只可见可以使用其他文本编辑器检测到吗?