VI 在使用 git bash split 拆分大文本文件后显示控制字符

VI shows control characters after splitting a large text file with git bash split

我使用 this thread 将一个大文本文件拆分为几个较小的文件。要拆分文件,我在 Git Bash:

中使用以下命令

split -l 80000 largeFile

然后我想编辑每个输出文件,但是当我在 VI 中打开它们时,输出看起来很奇怪,我无法正确编辑文件。输出包含很多 @ 符号和插入符。我假设这些是控制字符。请参阅以下屏幕截图:

我的问题是:

仔细看,每隔一个字符就是^@,里面Vim代表一个null字节(cp.:help <Nul>) .中间的字母是可读的 (USE [TIP_Update_...)。所以我们正在看的是(主要是?)ASCII 文本的 16 位编码(即每个字符两个字节);因为空字节是第二个,所以它是 little endian.

前两个字符(ÿþ)打破规则;这是一个 byte order mark,它为文本编辑器提供编码的提示。它的显示方式,Vim 认为文本采用 latin1 编码。

因此,您正在处理 16 位 UCS-2 编码的 Unicode (ISO/IEC 10646-1)(Vim 中的名称:ucs-2le;参见 :help encoding-values),但 Vim 不会自动检测到它们。

你可以

  • 通过:help ++enc手动强制编码::e! ++enc=ucs-2le
  • 重新配置 Vim (:help 'fileencodings') 以自动检测这些;实际上,默认值包括 ucs-bom 并且应该可以很好地检测到它们。

我知道这很老 post 但它可能对某些人有所帮助。如果您使用 Git Bash 将文件拆分为多个文件,请尝试在 65001 ( UTF-8 ) 而不是 ANSI 1252 或任何其他格式中创建主文件。我在拆分文件中遇到了同样的 NUL 问题,但是当我将主文件转换为 UTF-8 时,它工作得很好。

SPLIT -l 50000 Main.txt Split.txt