通过Vim保存平面文件,在文件中添加一个不可见的字节,创建一个新行



标题不是很具体,但是我很难确定正确的关键词,因为我不确定这里发生了什么。出于同样的原因,我的问题有可能是重复的,因为。如果是这样的话:对不起!

我有一个通过平面文件接收数据的Linux应用程序。我不知道这些文件是如何生成的,但我可以毫无问题地阅读它们。这些都是很短的文件,每个只有一行。

出于测试目的,我尝试修改其中一个文件并再次将其重新注入到应用程序中。但是当我这样做时,我可以在日志中看到它在消息末尾添加了一个神秘的分页符(导致应用程序无法识别消息)…

为了方便示例,假设我收到一个平面文件,名为original,其中包含以下内容:
ABCDEF

我复制了这个文件并命名为copy

  • 如果我使用"diff"命令比较这两个文件,它说它们是相同的(正如我所期望的那样)
  • 如果我打开通过Vi复制,然后退出,不改变也不保存任何东西,然后使用"diff"命令,它说它们是相同的(因为我也期望它们是)
  • 如果我打开,复制通过Vi,然后保存它不改变任何东西,然后使用"diff"命令,我有以下(我添加了一个点的布局目的):

diff original copy 1c1 < ABCDEF No newline at end of file --- .> ABCDEF

如果我比较两个文件的大小,我可以看到original是71字节而copy是72字节。

当我保存文件时,文件的格式似乎发生了变化。我首先想到的是编码问题,所以我在Vim上使用了":set list"命令来查看不可见的字符。但是对于这两个文件,我可以看到以下内容:

ABCDEF$

我已经找到了其他的方法来做我的测试,但这个问题仍然困扰着我,我真的很想了解它。所以,我的两个问题是:

  1. 这里发生了什么?
  2. 我如何修改这样的文件而不创建这个神秘的分页符?

谢谢你的帮助!

实际情况是,Vim默认设置为假设您编辑的文件以"换行符"字符结束。这是unix环境中正常的行为。但是你的程序正在读取的"文件"对我来说更像是"流",因为它们不以换行符结束。

为了确保这些"文件"写入时不使用换行符,在写入前设置以下选项:

:set binary noeol

参见:help 'eol'

相关内容

最新更新