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

时间:2013-01-05 11:19:51

标签: vim diff newline

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

1724c1724
< }
\ No newline at end of file
---
> }

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

4 个答案:

答案 0 :(得分:12)

由于vim文本编辑器,因此有时候可以清理&#34;文件给你。

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


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

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

:set binary
:set noeol
:w

或者,您可以使用:

:set noeol
:w ++bin

答案 1 :(得分:6)

添加换行符是Vim的默认行为。如果您不需要,请使用此解决方案:VIM Disable Automatic Newline At End Of File

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

set fileformats+=dos

答案 2 :(得分:3)

您可以将以下行放入.vimrc

autocmd FileType php setlocal noeol binary

哪个应该可以解决问题,但实际上你的做法有点不对劲。首先php根本不会介意结束,其次如果你不想保存你的更改,请不要按u或者更糟的是手动尝试重新创建文件的状态,但是只是退出而不保存q!。如果您离开编辑器并因某些原因保存,请尝试git checkout <file>

答案 3 :(得分:0)

3.206 Line 一个零个或多个非字符加上终止字符的序列。

有趣的是,vim将允许您打开一个新文件,写入该文件,该文件将为零字节。如果您打开一个新文件并使用“o”附加一行,则写入该文件将是两个字符长。如果你打开所述文件并删除第二行'dd'并写入文件,它将是一个字节长。打开文件备份并删除剩余的唯一行并写入文件,它将是零字节。所以只要它完全为空,vim就会让你写一个零字节文件。似乎无视上面的posix定义。我想......