Vim 在最后一行或 eof 上没有行尾

Posted

技术标签:

【中文标题】Vim 在最后一行或 eof 上没有行尾【英文标题】:Vim no end of line on last line or eof 【发布时间】:2011-05-07 05:14:23 【问题描述】:

我正在尝试设置 vim 以跳过在最后一行或 eof 上添加 eol,我已经尝试过这个

:set binary
:set noeol
:w

这并不完美,导致二进制覆盖文件类型供以后使用。

设置此选项的任何其他选项,我不需要在最后一行换行。

【问题讨论】:

二进制选项对文件类型没有任何作用。 它可能关心的人:你为什么投票结束这个?常见问题解答告诉 程序员常用的软件工具” 是热门话题。 @hobbs 将文件设置为二进制禁用许多选项,:help bin 它们都不是文件类型,:help bin 类似:VIM Disable Automatic Newline At End Of File 在 SO 【参考方案1】:

我想添加一个我认为可能有用的答案。选择的答案总是会删除文件上的 EOL,即使文件开始时也是如此。这可能是您想要的行为,也可能不是。在我看来,我想在最初打开文件时保留 EOL。

我的建议是稍作修改。将set binary 放在.vimrc 文件的顶部。这样任何文件都将以二进制模式打开。如果他们没有 EOL,那么 vim 将检测到这一点并将其保留为 NOEOL。如果他们有 EOL,那么它会将其识别为有 EOL 并保留它。

如果您希望 文件也没有 EOL,那么您应该设置,

au BufNewFile * set noeol

如果你总是想要 NOEOL ever,那么小伙子的命令就是。要注意的一件事是,如果您的文件底部有空格,那么最后您将丢失空格。这是因为发生了以下情况,

    VIM 读取文件并在末尾看到换行符并认为,OK,这是一个带有换行符的文件(无论是否处于二进制模式)。 当你写一个文件时,它会执行 autocmd,
      设置二进制模式 set noeol(这会删除 VIM 认为正在结束文件的 EOL 并将其删除。 文件被保存
    现在您的文件中的 EOL 少了一个。

此过程将重复进行,直到 EOL 消失且文件以单个字符结束。使用我的设置,会发生什么是文件被打开,如果 VIM 看到至少一个 EOL,那么它会在内部保留它。如果你保存那个文件,不管它在那里(你可以通过输入set eol?来检查。如果你想摆脱内部存储的EOL,你只需说set noeol然后保存并BOOM ,最后一个 EOL 被删除。

哇哦,我打字有点烦。

【讨论】:

【参考方案2】:

这比我在某处找到的更好:

au BufWritePre * :set binary | set noeol
au BufWritePost * :set nobinary | set eol

【讨论】:

另外,在某些情况下,默认情况下在您的 .vimrc 中添加 set noeol 也会很有用。【参考方案3】:

来自 vim 文档:

'binary' 'bin'      boolean (default off)
            local to buffer
            not in Vi
    This option should be set **before** editing a binary file.  You can also

因此,您应该使用vim -b:e ++bin file,或者使用:e! ++bin 重新加载。

【讨论】:

二进制对我不起作用,因为它会重置文件类型,还有其他选项可以在 eof 上禁用 eol 吗? 然后用:setf your_file_type重新启用? 我需要这个来处理 php 文件,它需要大量的黑客攻击,启用二进制文件,设置 noel,保存文件,而不是禁用二进制文件和设置文件类型。我还使用了 NERDTree,我可能必须破解它才能获得此功能。 这是迄今为止最好的答案!在 1 句话中,您为 OP 的问题提供了 3 个强大的解决方案。我能够结合vim -b myfile:set noeol 来满足我的需求,现在我拥有了可以在任何地方使用的技能。我不必让我的 .vimrc 文件变得强大。我知道如何使用编辑器的力量。【参考方案4】:

我想出了这个:

" php remove eol from end of file
autocmd FileType php setlocal noeol binary fileformats="mac,unix,dos"

谢谢大家。

干杯。

【讨论】:

以上是关于Vim 在最后一行或 eof 上没有行尾的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式:匹配模式后跟一个空格但不匹配2个或更多空格或EOF

Linux系统vim编辑器换行至文件的行首及行尾操作

vim

vim常用命令总结

vim中,将光标移至第60行,并且删除行尾的15个字符,如何执行命令?

Vim常用命令