Я продолжаю получать символ ^M
в своем vimrc, и это нарушает мою конфигурацию.
Что означает символ M в Vim?
Ответ 1
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).
Ответ 2
:%s/\r//g
работал у меня сегодня. Но моя ситуация, возможно, была несколько иной.
Ответ 3
Чтобы перевести новую строку вместо ее удаления:
:%s/\r/\r/g
Ответ 4
Вероятно, это означает, что у вас есть возврат каретки (разные операционные системы используют разные способы сигнализации конца строки).
Используйте dos2unix
для исправления файлов или установки файлов в vim:
set ffs=unix,dos
Ответ 5
Скажем, ваш текстовый файл - file.txt, затем запустите эту команду -
dos2unix file.txt
Он преобразует текстовый файл из формата dos в unix.
Ответ 6
Я удалил их всех с sed:
sed -i -e 's/\r//g'
Также можно заменить другой строкой или символом:
sed -i -e 's/\r/string/g'
Ответ 7
В Unix, вероятно, проще использовать команду "tr".
cat file1.txt | tr "\r" "\n" > file2.txt
Ответ 8
Вы можете исправить это в vim, используя
:1,$s/^V^M//g
где ^ - управляющий символ.
Ответ 9
Я получил текстовый файл, первоначально созданный на Windows-машине, с помощью пользователя Mac и необходимый для его импорта в базу данных Linux MySQL с помощью команды load data
.
Хотя VIM отображал символ "^ M", ни одна из вышеперечисленных проблем не работала для моей конкретной проблемы, данные импортировались, но были каким-то образом повреждены. Решение было довольно легко в конце (после большого разочарования).
Решение:
Выполнение dos2unix
TWICE в том же файле сделало трюк! Использование команды 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
И окончательная версия файла прекрасно импортируется в базу данных.
Ответ 10
Если это нарушает вашу конфигурацию, а символы ^ М требуются в сопоставлениях, вы можете просто заменить символы ^ М на <Enter>
или даже <C-m>
(оба набраны как простые последовательности символов, поэтому 7 и 5 символов, соответственно).
Это единственный рекомендуемый переносимый способ хранения специальных кодов клавиш в сопоставлениях
Ответ 11
В FreeBSD вы можете очистить ^M
вручную, введя следующее:
:%s/
Ctrl + V, затем Ctrl + M, затем Ctrl + M снова.
Ответ 12
Это единственное, что сработало в моем случае:
:e ++ff=dos
:wq
Ответ 13
Я обнаружил, что я загрязнял файлы в течение нескольких недель из-за того, что мой экземпляр Mvim в Homebrew был настроен на использование filetype = dos. Сделал требуемое изменение в .vimrc....
Ответ 14
try :%s/\^M//
По крайней мере, это сработало для меня.
Ответ 15
Если вы не указали другой fileformat
намеренно (скажем, :e ++ff=unix
для файла Windows), вероятно, что целевой файл имеет смешанные EOL.
Например, если файл имеет несколько строк с концами <CR><NL>
, а другие - с
<NL>
, а fileformat
автоматически устанавливается на unix
автоматически Vim при чтении, ^M (<CR>)
появится.
В таких случаях вступает в игру fileformats
. Подробнее см. :help ffs
.