Linux 通过Vim保存平面文件向文件中添加一个不可见字节以创建新行

Linux 通过Vim保存平面文件向文件中添加一个不可见字节以创建新行,linux,vim,character-encoding,diff,flat-file,Linux,Vim,Character Encoding,Diff,Flat File,标题不是很具体,但我很难识别正确的关键词,因为我不确定这里发生了什么。出于同样的原因,我的问题可能有重复的地方,例如。如果是这样的话:对不起 我有一个通过平面文件接收数据的Linux应用程序。我不知道这些文件是如何生成的,但我可以毫无问题地读取它们。这些是短文件,每个文件只有一行 出于测试目的,我尝试修改其中一个文件,并在应用程序中重新注入它。但当我这样做时,我可以在日志中看到它在消息末尾添加了一个神秘的分页符(导致应用程序无法识别消息) 例如,假设我收到一个名为original的平面文件,其中

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

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

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

例如,假设我收到一个名为original的平面文件,其中包含以下内容:

ABCDEF
ABCDEF$
我复制了这个文件,并将其命名为copy

  • 如果我使用“diff”命令比较这两个文件,它会说它们是相同的(正如我所期望的那样)
  • 如果我通过Vi打开copy,然后在不更改或保存任何内容的情况下退出,然后使用“diff”命令,则表示它们是相同的(我也希望它们是相同的)
  • 如果我通过Vi打开copy,然后在不更改任何内容的情况下保存它,然后使用“diff”命令,那么我有以下内容(我添加了点用于布局):

差异原件
1c1

如果我比较两个文件的大小,我可以看到原始文件是71字节,副本是72字节

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

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

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

  • 谢谢你的帮助

    默认情况下,Vim设置为假设您编辑的文件以“换行符”结尾。这是UNIX领域的正常行为。但是你的程序读取的“文件”在我看来更像“流”,因为它们不会以换行符结尾

    要确保写入这些“文件”时不使用换行符,请在写入之前设置以下选项:

    :set binary noeol
    

    请参阅
    :help'eol'

    发生的情况是,Vim默认设置为假定您编辑的文件以“换行符”结尾。这是UNIX领域的正常行为。但是你的程序读取的“文件”在我看来更像“流”,因为它们不会以换行符结尾

    要确保写入这些“文件”时不使用换行符,请在写入之前设置以下选项:

    :set binary noeol
    

    请参阅
    :帮助“eol”

    vi
    是一个行编辑器。如果文件未以换行符(
    \n
    ,ASCII 10)结尾,则
    vi
    会追加一行。这是你的一个额外字节。如果您不喜欢,请使用不同的编辑器,例如。GEmacs.
    vi
    是一个行编辑器。如果文件未以换行符(
    \n
    ,ASCII 10)结尾,则
    vi
    会追加一行。这是你的一个额外字节。如果您不喜欢,请使用不同的编辑器,例如。GEmacs.在Mac上使用
    VIM-Vi改进版7.3(2010年8月15日,2016年6月14日编译16:06:49)
    ,我发现正确的选项是:
    :设置二进制noendofline
    :设置二进制noeol
    没有效果。在Mac上使用
    VIM-Vi改进版7.3(2010年8月15日,2016年6月14日编译16:06:49)
    ,我发现正确的选项是:
    :set binary noendofline
    ,并且
    :set binary noeol
    没有效果。