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 消失且文件以单个字符结束。使用我的设置,会发生什么是文件被打开,如果 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