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

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


当前回答

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

其他回答

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

:set nofixendofline

现在关于vim的旧版本。

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

Vim -b文件 一旦进入vim:

:set noeol
:wq

完成了。

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

还有另一种选择:

:set binary
:set noeol
:wq

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

我没有尝试过这个选项,但在vim帮助系统(即帮助eol)中给出了以下信息:

'endofline' 'eol'   boolean (default on)
            local to buffer
            {not in Vi}

When writing a file and this option is off and the 'binary' option
is on, no <EOL> will be written for the last line in the file.  This
option is automatically set when starting to edit a new file, unless
the file does not have an <EOL> for the last line in the file, in
which case it is reset.  

通常你不需要设置或 重置此选项。当'binary'是 Off该值在写入时不使用 该文件。当'binary'在上面时,它就是 用来回忆曾经的存在 对于文件的最后一行, 当你写入文件时 情况从原始文件可以 (被)保持。但你可以改变,如果你 想要。

您可能对前面一个问题的答案也感兴趣:“为什么文件应该以换行符结束”。

我想我找到了一个比公认答案更好的解决办法。其他的解决方案都不适合我,我不想一直在二进制模式下工作。 幸运的是,这似乎完成了工作,我还没有遇到任何讨厌的副作用:在文本文件的末尾保留丢失的行尾。我只是将整个内容添加到我的~/.vimrc。

也许你可以看看他们为什么抱怨。如果一个php文件在结尾?>后面有换行符,php将把它作为页面的一部分输出。这不是问题,除非您尝试在文件包含后发送头文件。

但是,php文件末尾的?>是可选的。没有结尾?>,在文件末尾使用换行符没有问题。

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

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

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