Я продолжаю получать ^M
характер в моем vimrc, и это нарушает мою конфигурацию.
:digraphs
в vim показывает таблицу-график, с которой связана @LightnessRacesinOrbit.
preg_replace('/[\x01]/', ' ' ,$str);
Надеюсь, это поможет.
Я продолжаю получать ^M
характер в моем vimrc, и это нарушает мою конфигурацию.
:digraphs
в vim показывает таблицу-график, с которой связана @LightnessRacesinOrbit.
preg_replace('/[\x01]/', ' ' ,$str);
Надеюсь, это поможет.
Ответы:
Unix использует 0xA для символа новой строки. Windows использует комбинацию из двух символов: 0xD 0xA. 0xD - символ возврата каретки. ^M
случайно vim отображает 0xD (0x0D = 13, M - 13-я буква в английском алфавите).
Вы можете удалить все ^M
символы, выполнив следующее:
:%s/^M//g
Куда ^M
вводится, удерживая Ctrlи печатая, vзатем m, а затем отпуская Ctrl. Это иногда сокращается как ^V^M
, но учтите, что вы должны вводить его, как описано в предыдущем предложении, а не печатать его буквально.
Это выражение заменит все вхождения ^M
с пустой строкой (т.е. ничего). Я использую это, чтобы избавиться от ^M
файлов, скопированных из Windows в Unix (Solaris, Linux, OSX).
^M
символ, если файл не соответствует концу строки. Используйте команду, предоставленную Tomasz, затем введите, в :fileformat={unix|dos|mac}
зависимости от того, на какую ОС вы ориентируетесь. Если есть только несколько строк без ^M
символа, вы, вероятно, хотите :fileformat=dos
. Если вы редактируете файлы в редакторе, отличном от vim, убедитесь, что он настроен на совпадение с окончанием строки (Блокнот этого не сделает, но подойдет любой уважаемый редактор, например Notepad ++ или TextMate).
vi
: эту команду нужно вводить вручную. Просто вставив его в открытый терминал с vi
запущенным, вы получите ошибку «шаблон не найден».
:%s/\r//g
чтобы заменить возврат каретки в моем файле. Не удалось найти шаблон ^ V ^ M в файле, в котором была куча символов ^ M.
:%s/\r//g
работал на меня сегодня. Но моя ситуация, возможно, была немного другой.
:%s/\r//
было бы достаточно.
Чтобы перевести новую строку вместо ее удаления:
:%s/\r/\r/g
\r
имеет другое поведение в поисковой части по сравнению с заменой. См. Например, stackoverflow.com/a/3834303 .
:%s/\r//g
Я получил текстовый файл, изначально сгенерированный на компьютере Windows с помощью пользователя Mac, и мне нужно было импортировать его в БД Linux MySQL с помощью load data
команды.
Хотя VIM отображал символ «^ M», ни одно из вышеперечисленного не помогло мне в решении конкретной проблемы, данные могли импортироваться, но всегда были каким-то образом повреждены. В конце концов, решение было довольно простым (после большого разочарования).
Решение: выполнение dos2unix
ДВАЖДЫ на одном и том же файле сделало свое дело! Использование file
команды показывает, что происходит на этом пути.
$ file 'file.txt'
file.txt: ASCII text, with CRLF, CR line terminators
$ dos2unix 'file.txt'
dos2unix: converting file file.txt to UNIX format ...
$ file 'file.txt'
file.txt: ASCII text, with CRLF line terminators
$ dos2unix 'file.txt'
dos2unix: converting file file.txt to UNIX format ...
$ file 'file.txt'
file.txt: ASCII text
И финальная версия файла отлично импортируется в базу данных.
В Unix, вероятно, проще использовать команду «tr».
cat file1.txt | tr "\r" "\n" > file2.txt
Я удалил их все с помощью sed:
sed -i -e 's/\r//g' <filename>
Можно также заменить другой строкой или символом:
sed -i -e 's/\r/string/g' <filename>
Эти sed
команды работают в версии GNU / Linux, sed
но могут потребовать настройки на BSD (включая macOS).
Вы можете исправить это в VIM, используя
:1,$s/^V^M//g
где ^ - управляющий символ.
^M
есть.
Это единственное, что сработало в моем случае:
:e ++ff=dos
:wq
Если это нарушает вашу конфигурацию, и в сопоставлениях требуются символы ^ M, вы можете просто заменить символы ^ M на <Enter>
или даже <C-m>
(оба типа - простые последовательности символов, соответственно 7 и 5 символов).
Это единственный рекомендуемый, переносимый способ хранения специальных кодов клавиш в сопоставлениях.
В FreeBSD вы можете очистить ^M
вручную, набрав следующее:
:%s/
Ctrl+ V, затем Ctrl+ M, затем Ctrl+ Mснова.
Если вы не указали другое fileformat
намеренно (скажем, :e ++ff=unix
для файла Windows), вероятно, целевой файл имеет смешанные EOL.
Например, если файл имеет несколько строк с <CR><NL>
окончаниями, а другие - с
<NL>
окончаниями, и Vim при его чтении автоматически fileformat
установит unix
его ^M (<CR>)
. В таких случаях fileformats
вступает в игру. Смотрите :help ffs
подробности.