为什么gedit和vim会隐藏用户的最终换行符?

sch*_*itz 14 vi vim emacs newline gedit

我们假设我们有两个文本文档:

  1. 我们的第一个文件包含" hi"作为文本.
  2. 我们的第二个文件包含" hi"作为文本.

当我们在gedit,vi或vim中打开这两个文件时,这两个文件在各方面都在视觉上相同.

但是,当我们运行xxd文件时,我们得到以下内容:

  1. 我们的第一个文件的Hex内容为: 6869
  2. 我们的第二个文件的Hex内容为: 6869 0a

啊哈!有一个看不见的换行符.在vim中,如果我们对状态栏给予足够的关注并且碰巧理解了什么[noeol]意思,那么我们可能会对此有所了解,但在gedit中,这两个文件打开完全一样!

在一项小型调查中,当我要求人们仅使用gedit或vim来区分这两个文件时,他们100%的时间都失败了.当我要求他们使用leafpad或emacs完成相同的任务时,他们100%的成功.

我知道vi和gedit想要为他们创建的每个文件添加换行符(我承认这可能有优势).我不明白为什么gedit和vim认为从用户那里直观地隐藏这条换行符是有益的?特别是当这种行为可能极具破坏性时......

(例如,两个C程序员在他们的vi/gedit文本编辑器中看到这两个文件的内容相同,然后假设他们看到的是他们得到的内容,继续将内容写入数组char greeting[2].编写第一个文件的程序员 - 虽然他的代码有点草率 - 继续名声和财富,但第二个编写第二个文件的程序员死于悲惨的贫困,对这个看不见的(并且可以预防的)堆栈溢出感到困惑和困惑.)

所以祈祷说,让像vim和gedit这样的文本编辑器在他们创建的每个文档的末尾添加不可见的换行符,然后继续隐藏用户的这些换行符,这样这些文件的真实内容只是可见的有什么好处使用其他文本编辑器可检测到?

Ing*_*kat 10

你认为最后一行是"视觉上隐藏的"源于相反的观点.

许多人(特别是Unix背景)认为文本文件应该始终以换行符结尾(例如,请参阅为什么文本文件应以换行符结尾?),并且任何允许创建没有换行文件的文本编辑器都会从根本上被破坏.从这个角度来看,Vim中没有额外的空行只与这个世界观一致.该文件显示在编辑器中,就像它cat进入终端时一样.

从Vim的角度来看,缺少换行的文件是异端的,有缺陷的; 这就是为什么它会[noeol]在加载时显示消息(并且在保留缺少的换行符的同时编辑文件非常困难;尽管我已经编写了PreserveNoEOL插件来帮助它).

  • 我不同意.文本文件的最后一行应该以EOL字符结尾:这是正常的,这是有道理的.没有意义的是在文件的最后一个字符后面显示一个空行*,Vim正确地避免这样做.EOL的存在是正常的和预期的,所以没有什么特别的显示!当遇到没有EOL的文件时,Vim会帮助警告你.你怎么表明没有EOL?最后一行末尾的符号?如果最后一行是#4325并且你看不到它怎么办?状态线显然是唯一*明智的解决方案. (3认同)