Замена возврата каретки ^ M на Enter - PullRequest
33 голосов
/ 09 мая 2011

Я знаю, как удалить ^M в моих файлах (%s/^M//g), но эта строка - всего лишь одна строка, которую я хотел бы заменить ^M на ввод ... какой символ ввода в VIM (для использования в режиме comnad-line).

Ответы [ 5 ]

51 голосов
/ 09 мая 2011

Чтобы заменить символ возврата каретки (который является <C-m>) символом перевода строки (который является символом перевода строки Unix), вам нужно выполнить немного странную команду:

%s/\r/\r/g

Похоже, что он ничего не делает, но в регулярных выражениях и строках в двойных кавычках возврат каретки представлен с использованием \r и перевода строки с \n, тогда как в замещающей части: s command and substitute () функции они означают обратное.

Обратите внимание, что в терминале Enter выдает <C-m>, поэтому ваш первоначальный запрос недействителен.

35 голосов

:%s/\r//g работает только когда:

  • set ff=unix, который по окончании автоматически преобразует все CRLF в LF

  • set ff=dos и CR - мошеннический символ, которому не предшествует LF, например, вставленный с C-V C-M.

    CR в парах LF CR будет не .

Поэтому, если все, что вам нужно, - это конвертировать каждые LF CR в LF, вы должны использовать:

:set ff=unix
:w
14 голосов
/ 09 мая 2011

Вы можете заменить один символ, используя r<CR> в обычном режиме.
Или вы можете ввести «возврат» в режиме командной строки, набрав <C-v><CR>.

10 голосов
/ 09 мая 2011

В vim-сессии попробуйте:

:%s/^M//g

Где ^M достигается путем ctrl+V+M одновременного нажатия клавиш.

8 голосов
/ 20 июня 2014

Аналогично @ZyX и @anubhava, но при условии, что вы просто пытаетесь удалить надоедливые возвраты каретки из файла Windows, будет достаточно следующего:

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