我在一家PHP商店工作,我们都使用不同的编辑器,我们都必须在Windows上工作。我使用vim,但是店里的每个人都在抱怨,每当我编辑一个文件时,在底部有一个换行符。我四处搜索,发现这是vi & vim的记录行为…但我想知道是否有办法禁用这个功能。(这将是最好的,如果我可以禁用特定的文件扩展名)。

如果有人知道这事,那就太好了!


当前回答

可以从vim v7.4开始使用

:set nofixendofline

这里有一些关于这一变化的信息:http://ftp.vim.org/vim/patches/7.4/7.4.785。

其他回答

对于vim 7.4+,你可以使用(最好是在你的.vimrc上)(感谢罗泽轩的最后一点新闻!):

:set nofixendofline

现在关于vim的旧版本。

即使文件已经保存,在最后添加新行:

Vim -b文件 一旦进入vim:

:set noeol
:wq

完成了。

或者,您可以在vim中使用:e++ bin文件打开文件

还有另一种选择:

:set binary
:set noeol
:wq

查看更多细节在为什么我需要vim在二进制模式为'noeol'工作?

我已经用Perl和Python后处理实现了Blixtor的建议,要么在Vim内部运行(如果它是用这种语言支持编译的),要么通过外部Perl脚本运行。它可以在vim.org上作为PreserveNoEOL插件使用。

您是否可以使用一个特殊的命令来保存这些文件?

如果您执行:set binary,:w和:set nobinary,则如果文件开始时没有换行符,则写入文件时将不带换行符。

当然,这个命令序列可以放入用户定义的命令或映射中。

在你的.vimrc中添加以下命令来打开行结束选项:

autocmd FileType php setlocal noeol binary fileformat=dos

但是,PHP本身将忽略最后一行结束符——这应该不是问题。我几乎可以肯定,在你的情况下,有其他东西添加了最后一个换行符,或者可能是与windows/unix的行结束类型(\n或\r\n等)混淆。

更新:

另一个解决方案可能是在你的.vimrc中添加这一行:

set fileformats+=dos

我在Vim wiki上添加了一个类似(尽管不同)问题的提示:

http://vim.wikia.com/wiki/Do_not_auto-add_a_newline_at_EOF