У меня есть некоторые файлы, которые повреждаются с этим символом:
^@
Это не часть строки; это не доступно для поиска. Как я заменяю этим символом ни с чем, или как я удаляю этот символ?
Вот строка в качестве примера из одного файла:
^@F^@i^@l^@e^@n^@a^@m^@e^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@:^@ ^@^M^@
Вы могли попробовать:
%s/<CTRL-2>//g
(на обычных ПК)
%s/<CTRL-SHIFT-2>//g
(на Mac ПК)
где <CTRL-2>
средства сначала придавливают CTRL на обычных ПК, сохраняя его, как придавлено, поражают 2, выпускают CTRL.
и <CTRL-SHIFT-2>
средства сначала придавливают управление на Mac ПК, сохраняя его столь же придавленным, придавливают сдвиг на Mac ПК, сохраняя его, как придавлено, поражают 2, выпускают управление и сдвиг.
Наконец, обе из двух команд должны привести к %s/^@//g
на экране. ^@
означает отдельный символ (ПУСТОЙ байт, который иначе не мог быть отображен), нет ^
сопровождаемый @
, таким образом, Вы не можете просто ввести ^
и @
подряд в вышеупомянутой команде.
Эта команда удаляет весь ^@
.
Я не думаю, что Ваши файлы повреждаются. Ваша строка в качестве примера похожа на него, содержит обычный текст с пустыми байтами между каждым символом. Это предполагает, что это - текстовый файл, это было закодировано в UTF-16, но метка порядка байтов отсутствует в запуске файла. См. http://en.wikipedia.org/wiki/Byte-order_mark
Предположим, что я открываю Notepad, ввожу слово 'имя файла' и сохраняю как Обратный порядок байтов Unicode. Шестнадцатеричный дамп этого файла похож на это:
fe ff 00 66 00 69 00 6c 00 65 00 6e 00 61 00 6d 00 65
Если я открываю этот файл в Vim, он выглядит хорошо - 'fe и следующие' байты, говорят Vim, как файл кодируется. Теперь предположите, что я создаю файл, содержащий ту же самую последовательность байтов, но без продвижения 'fe и следующие'. Vim вставляет ^ (или <00>, в зависимости от Вашей конфигурации) вместо пустых байтов; Блокнот вставляет пробелы.
Так, а не удаляют пустые указатели, необходимо действительно надеяться заставлять Vim интерпретировать файл правильно. Можно заставить Vim перезагружать файл с корректным кодированием командой:
:e ++enc=utf16