it-swarm.com.ru

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

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

449
Max

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

506
Tomasz Stanczak
:%s/\r//g 

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

126
dlk5730

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

:%s/\r/\r/g
60
Mori

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

Используйте dos2unix, чтобы исправить файлы или установить форматы файлов в vim:

set ffs=unix,dos
36
cnicutar

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

dos2unix file.txt 

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

16
akritaag

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

cat file1.txt | tr "\r" "\n" > file2.txt
8
Irving Rabin

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

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

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

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

7
Freedom_Ben

Я получил текстовый файл, изначально сгенерированный на компьютере Windows с помощью пользователя Mac, и мне нужно было импортировать его в Linux MySQL DB с помощью команды 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

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

5
Anthony Palmer

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

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

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

4
Scott C Wilson

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

:e ++ff=dos

:wq

3
Sardeep Lakhera

Если это нарушает вашу конфигурацию и в сопоставлениях требуются символы ^ M, вы можете просто заменить символы ^ M на <Enter> или даже <C-m> (оба типа - простые последовательности символов, соответственно 7 и 5 символов).

Это единственный рекомендуемый, переносимый способ хранения специальных кодов клавиш в сопоставлениях.

2
sehe

В FreeBSD вы можете очистить ^M вручную, набрав следующее:

:%s/ Ctrl+V, затем Ctrl+M, затем Ctrl+M снова.

2
Victor Ong

Если вы не указали другое fileformat намеренно (скажем, :e ++ff=unix для файла Windows), вероятно, целевой файл имеет смешанные EOL.

Например, если в файле есть несколько строк с окончаниями <CR><NL> и другие с окончаниями <NL>, а для fileformat автоматически устанавливается unix при его чтении, появится ^M (<CR>). В таких случаях в игру вступает fileformats. Смотрите :help ffs для деталей.

1
ebk

Я обнаружил, что я загрязнял файлы в течение нескольких недель из-за того, что мой экземпляр Homebrew Mvim был настроен на использование filetype = dos. Сделано необходимое изменение в .vimrc ....

0
nichg

попробуйте :%s/\^M// По крайней мере, это сработало для меня.

0
xuc