[英]Why would Vim add a new line at the end of a file?
我经常使用 Wordpress,有时我会临时更改 Wordpress 核心文件以了解发生了什么,尤其是在调试时。 今天我得到了一个小惊喜。 当我准备将更改提交到 git 存储库时,我注意到git status
将 Wordpress 文件之一标记为未暂存以进行提交。 我记得在关闭该文件之前我已经恢复了我对该文件所做的所有更改,所以我决定使用diff
来查看发生了什么变化。 我将项目中的文件与我保存在下载目录中的 Wordpress 副本中的文件进行了比较。 事实证明,文件在最后是不同的。 diff
表示原始文件末尾缺少换行符:
1724c1724
< }
\ No newline at end of file
---
> }
我什至从未接触过那条线。 我在大文件中间某处所做的更改。 这让我认为 vim 在文件末尾添加了一个换行符。 为什么会这样?
我在这里看到的所有答案都解决了“如何防止 Vim 在文件末尾添加换行符? ”的问题,而问题是“为什么 Vim 会在文件末尾添加新行? ”。 我的浏览器的搜索引擎把我带到这里,但我没有找到那个问题的答案。
它与 POSIX 标准如何定义行有关(请参阅为什么文件应以换行符结尾? )。 所以,基本上,一行是:
- 3.206线
- 零个或多个非 <newline> 字符加上终止 <newline> 字符的序列。
因此,它们都需要以换行符结尾。 这就是为什么 Vim 总是默认添加换行符的原因(因为,根据 POSIX,它应该总是在那里)。
它不是唯一这样做的编辑器。 Gedit是GNOME 中的默认文本编辑器,它做同样的事情。
许多其他工具也需要换行符。 见例如:
此外,您可能感兴趣: Vim 在文件末尾显示换行符。
因为vim
是一个文本编辑器,它有时可以为您“清理”文件。 请参阅http://vimhelp.appspot.com/vim_faq.txt.html#faq-5.4以了解有关如何在没有结尾换行符的情况下编写的详细信息,解释如下:
如何在文件末尾写入没有换行符 (EOL) 的文件?
可以关闭
eol
选项,打开binary
选项,写入文件末尾不带EOL的文件:
:set binary
:set noeol
:w
或者,您可以使用:
:set noeol
:w ++bin
添加换行符是 Vim 的默认行为。 如果您不需要它,请使用此解决方案: VIM Disable Automatic Newline At End Of File
要禁用,请将其添加到您的 .vimrc
set fileformats+=dos
您可以将以下行放入您的 .vimrc
autocmd FileType php setlocal noeol binary
这应该可以解决问题,但实际上您的方法有些错误。 首先, php
根本不介意结束,其次,如果您不想保存更改,请不要按u
或更糟糕的手动尝试重新创建文件的状态,而只是退出而不保存q!
. 如果您出于某种原因离开编辑器并保存,请尝试git checkout <file>
3.206 行 零个或多个非字符加上终止字符的序列。
有趣的是,vim 将允许您打开一个新文件,写入该文件,该文件将为零字节。 如果您打开一个新文件并使用o
附加一行,然后写入该文件,它将是两个字符长。 如果您打开上述文件备份并删除第二行dd
并写入文件,它将是一个字节长。 打开文件备份并删除唯一剩余的行并将文件写入零字节。 所以 vim 只会让你写一个零字节的文件,只要它是完全空的。 似乎违背了上面的 posix 定义。 我猜...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.