为什么Vim会在文件末尾添加一个新行?

Buz*_*uzu 37 vim diff newline

我经常使用wordpress,有时我会暂时更改wordpress核心文件,以便了解发生了什么,特别是在调试时.今天我有点意外.当我准备将我的更改提交到我的git存储库时,我注意到它将git status一个wordpress'文件标记为没有为提交暂存.我记得在关闭它之前我已经将所做的所有更改还原到该文件中,因此我决定使用diff以查看已更改的内容.我将项目中的文件与我保存在下载目录中的wordpress副本上的文件进行了比较.事实证明文件在最后有所不同.diff表示原始文件末尾缺少换行符:

1724c1724
< }
\ No newline at end of file
---
> }
Run Code Online (Sandbox Code Playgroud)

我从来没有触及那条线.我在大文件中间某处所做的更改.这让我认为vim在文件末尾添加了换行符.为什么会这样?

Peq*_*que 42

我在这里看到的所有答案都解决了" 我怎么能阻止Vim在文件末尾添加换行符? "的问题,而问题是" 为什么Vim会在文件末尾添加一个新行? ".我的浏览器的搜索引擎把我带到了这里,我找不到这个问题的答案.

它与POSIX标准如何定义一条线有关(请参阅文件为什么以换行符结尾?).所以,基本上,一行是:

3.206线
一系列零个或多个非<newline>字符加上一个终止<newline>字符.

因此,他们都需要以换行符结束.这就是为什么Vim总是默认添加换行符(因为根据POSIX,它应该总是在那里).

它不是唯一一个这样做的编辑.gedit中,在默认的文本编辑器GNOME,做同样的事情.


编辑

许多其他工具也期望换行符.参见例如:

此外,您可能感兴趣:Vim在文件末尾显示换行符.


pax*_*blo 13

因为vim文本编辑器,它有时可以为您"清理"文件.

有关如何在没有结尾换行符的情况下编写的详细信息,请参阅http://vimhelp.appspot.com/vim_faq.txt.html#faq-5.4,如下所述:


如何在文件末尾没有换行符(EOL)的情况下编写文件?

您可以关闭该eol选项并打开binary选项,在文件末尾没有EOL的情况下编写文件:

__PRE__

或者,您可以使用:

__PRE__


ATO*_*TOA 6

添加换行符是Vim的默认行为.如果您不需要它,请使用此解决方案:VIM在文件末尾禁用自动换行

要禁用,请将其添加到.vimrc

set fileformats+=dos
Run Code Online (Sandbox Code Playgroud)