gVim показывает возврат каретки (^ M), даже когда файловый режим явно DOS - PullRequest
75 голосов
/ 28 апреля 2009

Я использую gVim в Windows. Мой код показывает ^M символов в конце строк. Я использовал :set ff=dos безрезультатно. Символы ^M остаются для существующих строк, но не отображаются для вводимых строк. Я переключил режимы на Mac (показывает ^J символов) и Unix (также показывает ^M символов) и вернулся к DOS. Кто-нибудь еще видел это?

Ответы [ 10 ]

139 голосов
/ 28 апреля 2009

Это происходит, когда у вас есть смесь концовок Windows и Unix. Если у вас 100 строк, 99 - \ r \ n, а одна - \ n, вы увидите 99 ^ M символов. Исправление - найти эту строку и заменить ее. Или запустите dos2unix для файла. Вы можете заменить окончание строки Windows на:

:%s/\r\(\n\)/\1/g

41 голосов
/ 26 июля 2011

Вы также можете запустить:

:e ++ff=dos

Чтобы удалить ^M: см. Формат файла - Vim Tips Wiki .

19 голосов
/ 29 апреля 2009

Я обычно использую следующее, чтобы очистить мои окончания строки:

:g/^M$/s///

Чтобы получить ctrl-M, я обычно набираю ctrl-Q, затем ctrl-M и вставляет его. (В некоторых средах это может быть ctrl-V, затем ctrl-M.) Я считаю, что легче запомнить, чем rq .

Не забудьте также сделать :set ff=dos, иначе вы все равно будете экономить с окончаниями строк UNIX.

15 голосов
/ 28 мая 2010

Я знаю, что на это уже был дан ответ, но я использую трюк

:%s/\r/\r/g

Это заменяет возврат каретки Unix Windows CRLF. Просто добавлено на случай, если у кого-то еще возникнут проблемы.

6 голосов
/ 24 марта 2013

Вы можете игнорировать эти символы!

положи это в свой vimrc

матч игнорировать / \ r $ /

4 голосов
/ 31 мая 2011

Запуск Vim 7.3 в Windows 7. Я использовал следующую команду:

:%s/^M/\r/g

Чтобы создать ^ M, я набрал CTRL + Q, затем CTRL + M.

4 голосов
/ 02 декабря 2010

На самом деле, что у меня работало (на 64-битных окнах, gVIM: 7.2) было:

:set ffs=dos

не только: ff

2 голосов
/ 19 июня 2013

Это дополнительные строки CR, обычно из-за использования файла в смешанных системах UNIX / DOS.

Возможно самый короткий ответ для удаления одного ^ M в конце каждой строки, и то, что я использую, это:

:%s/\r

, что эквивалентно:

:%s/\r//

но косые черты не требуются (они предполагаются).

2 голосов
/ 18 января 2013

Это, наверное, немного просто для многих из вас, но случайно это полезно.

Основываясь на ответе richq, я обнаружил, что они полезны в моем vimrc. Обратите внимание, что второй комментарий обычно закомментирован, потому что он немного запутывает dd, так как Vim будет ждать другого нажатия клавиши, если это команда mapped ex.

function! D2u()
    execute '%s/\r\(\n\)/\1/g'
endfunction
"map d2u :%s/\r\(\n\)/\1/g

Первый запускается путем ввода call D2u() в ex, а второй - нажатием D2u в режиме редактирования.

0 голосов
/ 01 сентября 2017

много чего перепробовал, но сработало следующее

:%s/\r/\r/g

примечание: используйте г , если вы хотите, чтобы эффект на весь файл

...