VI показывает управляющие символы после разделения большого текстового файла с помощью git bash split

Я использовал эту ветку, чтобы разбить большой текстовый файл на несколько небольших файлов. Чтобы разделить файл, я использую следующую команду в Git Bash:

split -l 80000 largeFile

Затем я хочу отредактировать каждый из выходных файлов, но когда я открываю их в VI, выходные данные выглядят странно, и я не могу правильно редактировать файл. Вывод содержит много @ символы и символы. Я предполагаю, что это контрольные символы. Смотрите следующий скриншот:

Мои вопросы:

  • Почему файл отображается так?
  • Как правильно отредактировать файл в VI?

1 ответ

Решение

Если вы посмотрите внимательно, каждый второй персонаж ^@, который внутри Vim представляет нулевой байт (ср. :help <Nul>). Буквы между ними читаемы (USE [TIP_Update_...). Итак, мы рассматриваем 16-битную кодировку (т.е. два байта для каждого символа) (в основном?) Текста ASCII; поскольку нулевой байт является вторым, он имеет порядок байтов.

Первые два символа (ÿþ нарушать правила; это метка порядка байтов, которая дает текстовым редакторам подсказку о том, что такое кодировка. Как он отображается, 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 и должен обнаружить это просто отлично.

Я знаю, что это очень старый пост, но он может кому-то помочь. Если вы используете Git Bash для разделения файла на несколько файлов, попробуйте создать основной файл в формате 65001 ( UTF-8) вместо ANSI 1252 или любого другого. Я столкнулся с теми же проблемами NUL в моих разделенных файлах, но когда я преобразовал свой основной файл в UTF-8, он работал отлично.

SPLIT -l 50000 Main.txt Split.txt
Другие вопросы по тегам