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 中打开它们时,输出看起来很奇怪,我无法正确编辑文件。输出包含很多 @
符号和插入符。我假设这些是控制字符。请参阅以下屏幕截图:
我的问题是:
- 为什么文件会这样显示?
- 如何在 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
我使用 this thread 将一个大文本文件拆分为几个较小的文件。要拆分文件,我在 Git Bash:
中使用以下命令split -l 80000 largeFile
然后我想编辑每个输出文件,但是当我在 VI 中打开它们时,输出看起来很奇怪,我无法正确编辑文件。输出包含很多 @
符号和插入符。我假设这些是控制字符。请参阅以下屏幕截图:
我的问题是:
- 为什么文件会这样显示?
- 如何在 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