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

学校笑话

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

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

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

但是,当我们xxd在文件上运行时,会得到以下信息:

  1. 我们第一个文件的十六进制内容为: 6869
  2. 我们第二个文件的十六进制内容为: 6869 0a

啊哈!有一条看不见的换行符。在vim中,如果我们密切注意状态栏并碰巧了解什么[noeol]意思,那么我们可能会继续这样做,但是在gedit中,这两个文件完全一样打开!

在一次小型调查中,当我要求人们仅使用gedit或vim区分两个文件时,它们100%的时间失败了。当我要求他们使用Leafpad或emacs完成相同的任务时,他们100%的成功率。

我了解vi和gedit希望在创建的每个文件中添加换行符(并且我承认这样做可能会有好处)。我不明白的是,为什么gedit和vim认为从用户的视觉上隐藏此换行符是有益的?尤其是当这种行为可能极具破坏性时...

(例如,以两个C程序员在他们的vi / gedit文本编辑器中看到这两个文件的内容相同,然后假设他们看到的是所得到的,继续将内容写入数组char greeting[2]。第一个尽管编写第一个文件的程序员虽然代码有些草率,但仍声名for起,但编写第二个文件的第二个程序员却死于悲惨的贫困之中,并被这种无形(和可预防的)堆栈溢出所迷惑和困惑。)

因此,请告诉我们,让vim和gedit之类的文本编辑器在它们创建的每个文档的末尾添加不可见的换行符,然后继续向用户隐藏这些换行符,以使这些文件的真实内容仅可见是什么,这有什么好处?使用其他文本编辑器可以检测到吗?

英戈·卡卡特(Ingo Karkat)

您认为最后一行是“视觉上隐藏的”是基于相反的观点。

许多人(尤其是具有Unix背景的人)认为文本文件应始终以换行符结尾(例如,请参见为什么文本文件应以换行符结尾?),并且允许创建文件而没有文本文件的任何文本编辑器从根本上来说都是损坏的。从这个角度来看,Vim中没有其他空行仅与这种世界观一致。文件在cat终端中的显示与在编辑器中的显示相同

从Vim的角度来看,缺少换行符的文件是异端和有缺陷的文件。这就是为什么它[noeol]在加载时显示为消息的原因(在保留丢失的换行符的同时很难编辑文件;尽管我已经编写了PreserveNoEOL插件来对此进行帮助)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当打印包含换行符的变量时,为什么最后一个换行符被剥离?

来自分类Dev

为什么换行符被 concat 删除

来自分类Dev

Vim为什么要添加换行符?这是惯例吗?

来自分类Dev

为什么 C++17 字符类 [:blank:] 匹配换行符和回车符?

来自分类Dev

Vim:显示换行符和回车符

来自分类Dev

gedit错误(?)替换换行符

来自分类Dev

为什么我的“ +”运算符被视为换行符?

来自分类Dev

为什么我的“ +”运算符被视为换行符?

来自分类Dev

如果return和{之间有换行符,JS为什么会引发语法错误

来自分类Dev

如果return和{之间有换行符,为什么JS会引发语法错误

来自分类Dev

jQuery append()添加引号和换行符,我不知道为什么

来自分类Dev

为什么读取时使用默认的IFS和单个变量添加换行符?

来自分类Dev

为什么print语句会在python中生成没有换行符的换行符?

来自分类Dev

为什么在参数中不存在换行符时会创建换行符?

来自分类Dev

为什么Windows的换行符比Unix的换行符大?

来自分类Dev

如何阻止Gedit,Gvim,Vim,Nano添加文件结束换行符char?

来自分类Dev

如何阻止Gedit,Gvim,Vim,Nano添加文件结束换行符char?

来自分类Dev

我无法替换vim和iterm中的换行符

来自分类Dev

为什么换行符不起作用?

来自分类Dev

为什么回声会产生换行符?

来自分类Dev

为什么std :: istream_iterator忽略换行符?

来自分类Dev

为什么前置标签后的换行符消失了?

来自分类Dev

为什么循环后有换行符

来自分类Dev

给mysqli_query时,为什么换行符消失了?

来自分类Dev

为什么遇到换行符后input()不停止?

来自分类Dev

为什么IDLE在我的代码后添加换行符?

来自分类Dev

添加换行符会破坏JSX。为什么?

来自分类Dev

为什么Shell Command Substitution吞噬了尾随的换行符?

来自分类Dev

为什么粘贴命令添加换行符?

Related 相关文章

  1. 1

    当打印包含换行符的变量时,为什么最后一个换行符被剥离?

  2. 2

    为什么换行符被 concat 删除

  3. 3

    Vim为什么要添加换行符?这是惯例吗?

  4. 4

    为什么 C++17 字符类 [:blank:] 匹配换行符和回车符?

  5. 5

    Vim:显示换行符和回车符

  6. 6

    gedit错误(?)替换换行符

  7. 7

    为什么我的“ +”运算符被视为换行符?

  8. 8

    为什么我的“ +”运算符被视为换行符?

  9. 9

    如果return和{之间有换行符,JS为什么会引发语法错误

  10. 10

    如果return和{之间有换行符,为什么JS会引发语法错误

  11. 11

    jQuery append()添加引号和换行符,我不知道为什么

  12. 12

    为什么读取时使用默认的IFS和单个变量添加换行符?

  13. 13

    为什么print语句会在python中生成没有换行符的换行符?

  14. 14

    为什么在参数中不存在换行符时会创建换行符?

  15. 15

    为什么Windows的换行符比Unix的换行符大?

  16. 16

    如何阻止Gedit,Gvim,Vim,Nano添加文件结束换行符char?

  17. 17

    如何阻止Gedit,Gvim,Vim,Nano添加文件结束换行符char?

  18. 18

    我无法替换vim和iterm中的换行符

  19. 19

    为什么换行符不起作用?

  20. 20

    为什么回声会产生换行符?

  21. 21

    为什么std :: istream_iterator忽略换行符?

  22. 22

    为什么前置标签后的换行符消失了?

  23. 23

    为什么循环后有换行符

  24. 24

    给mysqli_query时,为什么换行符消失了?

  25. 25

    为什么遇到换行符后input()不停止?

  26. 26

    为什么IDLE在我的代码后添加换行符?

  27. 27

    添加换行符会破坏JSX。为什么?

  28. 28

    为什么Shell Command Substitution吞噬了尾随的换行符?

  29. 29

    为什么粘贴命令添加换行符?

热门标签

归档