Что означает символ M в Vim?

Я продолжаю получать символ ^M в своем vimrc, и это нарушает мою конфигурацию.

Ответ 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.