gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 22:32:57 27 4
gpt4 key购买 nike

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

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

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

    但是,当我们运行 xxd 时在文件上,我们得到以下信息:
  • 我们第一个文件的十六进制内容为: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 text files end with a newline? ),并且任何允许在没有换行符的情况下创建文件的文本编辑器都从根本上被破坏了。从这个角度来看,Vim 中没有额外的空行只是符合这种世界观。该文件出现在编辑器中,就像它是 cat 时一样。进入终端。

    从 Vim 的角度来看,缺少换行符的文件是异端和有缺陷的;这就是它用 [noeol] 表示的原因加载消息(并且在保留丢失的换行符的同时编辑文件非常困难;尽管我已经写了 PreserveNoEOL plugin 来帮助解决这个问题)。

    关于vim - 为什么 gedit 和 vim 对用户隐藏最后的换行符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19240082/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com