Vim在最后一行或文件末尾没有行尾标记

29

我正在尝试设置vim,以便跳过在最后一行或EOF上添加EOL,我已经尝试了这个:

:set binary
:set noeol
:w

这种方法并不完美,因为会在后续使用中覆盖二进制文件类型。

还有其他选项可以设置此项,我不需要在最后一行换行。


二进制选项不会对文件类型进行任何操作。 - hobbs
1
敬启者:为什么您投票关闭了这个问题?FAQ中明确说明,“程序员常用的软件工具”是属于讨论范围内的。 - Benoit
@hobbs 将文件设置为二进制会禁用许多选项,:help bin - Dejan Ranisavljevic
没有一个是文件类型,:help bin。 - hobbs
类似:VIM禁用文件末尾自动换行 在SO上。 - kenorb
4个回答

17
我想新增一篇答案,我认为它可能也很有用。选定的答案无论原文件是否含有行尾符,总是会移除行尾符。这可能是你想要的行为,也可能不是。在我看来,我想要保留与原始打开文件时相同的行尾符。

我的建议是进行轻微修改。在你的.vimrc文件顶部添加set binary。这样,任何文件都将在二进制模式下打开。如果它们没有行尾符,那么Vim将检测到并保留为NOEOL。如果它们有行尾符,则将其视为具有行尾符并保留它。

如果你希望新建的文件也没有行尾符,那么应该设置:
au BufNewFile * set noeol
如果你想要在任何时候都不要行尾结束符(NOEOL),那么使用chap命令。需要注意的是,如果文件末尾有空格,则会丢失这些空格,因为VIM读取到文件末尾的换行符后,会执行“set binary mode”和“set noeol”自动命令,从而删除VIM认为的文件末尾的换行符,导致文件少了一个换行符。如果希望彻底删除存储在内部的换行符,可以使用"set noeol"命令,然后保存文件即可。

7
这是我在其他地方找到的更好的内容:
au BufWritePre * :set binary | set noeol
au BufWritePost * :set nobinary | set eol

同样,在某些情况下,将 set noeol 默认添加到您的 .vimrc 中会非常有用。 - FelikZ

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

二进制对我不起作用,因为它重置了文件类型,是否有其他选项可以在 eof 上禁用 eol? - Dejan Ranisavljevic
然后使用 :setf your_file_type 将其重新启用? - Benoit
我需要这个功能用于 PHP 文件,但这需要进行太多的操作,如启用二进制、设置 noel、保存文件,然后禁用二进制并设置文件类型。我还使用 NERDTree,可能需要对其进行修改以获得此功能。 - Dejan Ranisavljevic
这是目前为止最好的答案!在一句话中,您提供了3个强大的解决方案来解决OP的问题。我能够结合vim -b myfile:set noeol来满足我的需求,现在我拥有了一项可以带到任何地方的技能。我不必让我的.vimrc文件变得强大。我知道如何使用编辑器的功能。 - Bruno Bronosky

1
我想到了这个:
" php remove eol from end of file
autocmd FileType php setlocal noeol binary fileformats="mac,unix,dos"

谢谢大家。

干杯。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接