Я продолжаю получать ^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подробности.