27

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

:set binary
:set noeol
:w

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

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

4

4 回答 4

17

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

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

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

au BufNewFile * set noeol

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

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

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

哇哦,我在打字时很啰嗦。

于 2011-01-08T02:05:20.090 回答
7

这是我在某处发现的更好:

au BufWritePre * :set binary | set noeol
au BufWritePost * :set nobinary | set eol
于 2010-11-11T09:06:38.663 回答
5

来自 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 -bor :e ++bin file,或使用 重新加载:e! ++bin

于 2010-11-09T12:17:10.653 回答
1

我想出了这个:

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

谢谢你们。

干杯。

于 2010-11-09T15:31:57.503 回答