你能强制Vim在文件末尾显示空行吗?

13
当我在记事本中打开文本文件时,如果最后一行文本包含回车符,则会显示一个空行。然而,在Vim中不会显示这个空行。另一件我注意到的事情是,Vim编辑器默认会在最后一行添加回车符(即使它不显示)。我可以告诉,因为如果我在记事本中打开一个在Vim中创建的文件,它会在文件末尾显示一个空行。
无论如何,我可以接受这两个差异,但我想知道是否有一个选项可以在Vim中切换这种行为。
谢谢
PS - GVim 7.2
[更新]
这是否应该发布在Server Fault上?
[更新2]
我会重新表述一下... 我需要知道单行文件末尾是否有回车符(Notepad会显示一个没有文本的额外行,但在Vim中我无法得知)。这是由于一个Progress程序读取文本文件(期望单行,但带有回车符),并解析文本以某种方式。如果没有回车符,Progress将把该行视为null。
[解决方案]
我发现确保有回车符的一种方法(但要确保我不添加第二个回车符)是确保我已经打开了行尾写入选项(:set eol),然后只需进行写入/保存。如果文件中没有end of line,这将在文件中放置一个end of line。否则,它不会添加新的回车符。

这在Serverfault上没有任何意义。也许在Superuser上可以。但似乎共识是要容忍这里的vim问题,因为vim被认为是一个集成开发环境。 - innaM
好的,谢谢...我想知道SuperUser是否已经退出私有测试版了...我猜我可以去查一下。 - Jason Down
它仍处于测试版阶段,但不是私有的,而是半私有测试版:http://blog.stackoverflow.com/2009/07/super-user-semi-private-beta-begins/ - innaM
4个回答

6
:help endofline

解释如何停止vim添加额外的换行符。

3
解决了一个问题...但对我来说更大的问题是另一个(没有显示有空行) = \ 需要确保每行末尾有一个换行符(只有一个)。 - Jason Down
1
我同意我想在那里有一条线,但我也想能够看到它的存在。 - Keith Smiley

3

一个有用的 Vim 选项是

set list

它将帮助您查看所有行尾字符(以及可能的其他通常不可见字符)。因此,您将能够直接在Vim中查看此最后一个行尾,而不仅仅是在记事本中。


2
这似乎总是显示一个$字符。即使之后没有空行。 - Jason Down
没有空白行。vim认为一行是以换行符结尾的内容。你所说的空白行没有换行符,因此vim认为没有内容可显示。 - innaM
请看更新2的评论...重新措辞问题以更准确。 - Jason Down
我确认即使“diff”在这些文件之间打印出差异,使用:set list这些文件似乎是相同的。 - ROMANIA_engineer

3
看起来vim将换行符视为行终止符,而记事本将其视为行分隔符:摘自http://en.wikipedia.org/wiki/Newline 有些人会混淆换行符是终止符还是分隔符。如果将换行符视为分隔符,则文件的最后一行不会有换行符。大多数系统的通用约定是即使在最后一行之后也要添加一个换行符,即将换行符视为行终止符。如果文件的最后一行没有换行符,某些程序在处理该文件的最后一行时可能会出现问题。相反,期望使用换行符作为分隔符的程序将解释最后一个换行符为开始一个新的(空)行。这可能导致报告文件的行数不同,但通常是无害的。
如果我没记错,在类Unix系统上,文本文件必须以换行符结尾。

1

当您在VIM中打开文件时,状态行应该在文件名后面显示[noeol]。这是一种指示。正如Manni所说,您可以通过关闭endofline选项并打开binary选项来更改此设置。您可以在.vimrc文件中将其设置为默认设置。


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