Что означает ^M character в Vim?

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

15 ответов


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


:%s/\r//g 

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


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

:%s/\r/\r/g

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

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

set ffs=unix,dos

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

dos2unix file.txt 

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


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

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

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

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

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

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


Я получил текстовый файл, первоначально сгенерированный на машине Windows через пользователя Mac, и должен был импортировать его в Linux MySQL DB с помощью


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

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

где ^ - символ контроля.


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

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


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

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


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

:e ++ff=dos

:wq


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


попробовать :%s/\^M// по крайней мере это работало для меня.


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

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