Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim VI显示使用git-bash-split分割大文本文件后的控制字符_Vim_Split_Vi_Git Bash - Fatal编程技术网

Vim VI显示使用git-bash-split分割大文本文件后的控制字符

Vim VI显示使用git-bash-split分割大文本文件后的控制字符,vim,split,vi,git-bash,Vim,Split,Vi,Git Bash,我过去常常把一个大的文本文件分割成几个小文件。要分割文件,我在Git Bash中使用以下命令: 拆分-l 80000大文件 然后我想编辑每个输出文件,但是当我在VI中打开它们时,输出看起来很奇怪,我无法正确编辑文件。输出包含大量@符号和插入符号。我假设这些是控制字符。请参见以下屏幕截图: 我的问题是: 为什么文件会这样显示? 如何在VI中正确编辑文件? 如果仔细观察,每秒钟的字符都是^@,它在Vim中表示一个空字节cp。中间的字母是可读的,使用[TIP_Update_uz]。。因此,我们正在研究

我过去常常把一个大的文本文件分割成几个小文件。要分割文件,我在Git Bash中使用以下命令:

拆分-l 80000大文件

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

我的问题是:

为什么文件会这样显示? 如何在VI中正确编辑文件?
如果仔细观察,每秒钟的字符都是^@,它在Vim中表示一个空字节cp。中间的字母是可读的,使用[TIP_Update_uz]。。因此,我们正在研究的是16位编码,即大多数ASCII文本的每个字符有两个字节;由于空字节是第二个字节,因此它是小尾端

前两个字符ÿþ违反了规则;这是一个为文本编辑器提供编码提示的字符。按照显示方式,Vim认为文本是拉丁1编码

因此,您在Vim:UCS-2le中处理的是16位UCS-2编码的Unicode ISO/IEC 10646-1名称;请参阅,但Vim不会自动检测它们

你也可以

通过::e!++enc=ucs-2le手动强制编码 重新配置Vim以自动检测这些;实际上,默认值包括ucs bom,应该可以很好地检测这些。
我知道这是一篇非常古老的文章,但它可能会对某些人有所帮助。如果您使用Git Bash将文件拆分为多个文件,请尝试使用65001 UTF-8而不是ANSI 1252或任何其他格式创建主文件。我在拆分的文件中遇到了相同的NUL问题,但当我将主文件转换为UTF-8时,它工作得非常好

SPLIT -l 50000 Main.txt Split.txt

谢谢,这对拆分输出的第一个文件非常有效,但对第二个文件却不起作用。结果如下:文件最初看起来是这样的:区别在于前两个字符ÿþ没有出现在这里。你能提供一个有效的命令吗?看起来拆分的字节数不是偶数,因此秒ond one实际上是带有边界损坏的大端字节。如果您真的需要在行上拆分,您的shell还需要正确理解编码。在偶数上拆分会更容易!字节计数,例如拆分-b 800000。如果您手动提供编码,则缺少BOM并不重要。对于“文件编码”,它将是com但是,即使在使用命令split-b 100000000 largeFile时,第二个文件看起来是这样的:但是我似乎可以使用您提供的命令::e!++enc=ucs-2leYes,这就是我的意思;您需要手动++enc,因为后续拆分中缺少BOM。