Что символ ^ M означает в Vim? - PullRequest
454 голосов
/ 30 апреля 2011

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

Ответы [ 15 ]

511 голосов
/ 30 апреля 2011

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).

126 голосов
/ 22 января 2014
:%s/\r//g 

работал на меня сегодня. Но моя ситуация могла быть немного другой.

60 голосов
/ 03 июля 2014

Чтобы перевести новую строку вместо ее удаления:

:%s/\r/\r/g
36 голосов
/ 30 апреля 2011

Это, вероятно, означает, что у вас есть возврат каретки (разные операционные системы используют разные способы сигнализации конца строки).

Используйте dos2unix для исправления файлов или установки форматов файлов в vim:

set ffs=unix,dos
16 голосов
/ 24 февраля 2015

Допустим, ваш текстовый файл - file.txt, затем выполните эту команду -

dos2unix file.txt 

Преобразует текстовый файл из DOS в формат Unix.

8 голосов
/ 14 февраля 2015

В Unix, вероятно, проще использовать команду 'tr'.

cat file1.txt | tr "\r" "\n" > file2.txt
7 голосов
/ 03 января 2015

Я удалил их все с помощью sed:

sed -i -e 's/\r//g'

Можно также заменить другой строкой или символом:

sed -i -e 's/\r/string/g'

5 голосов
/ 21 ноября 2014

Я получил текстовый файл, изначально сгенерированный на компьютере 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

И окончательная версия файла отлично импортируется в базу данных.

4 голосов
/ 30 апреля 2011

Вы можете исправить это в vim, используя

:1,$s/^V^M//g

где ^ - управляющий символ.

3 голосов
/ 01 февраля 2018

Это единственное, что сработало в моем случае:

:e ++ff=dos

:wq

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...