Вопрос по linux, vim, windows – ^ M в конце каждой строки в vim

118

Когда я редактирую исходные файлы, используя vim и другие редакторы, иногда в конце строки я получаю эти символы ^ M в конце каждой строки. Я думаю, что это как-то связано с редактированием файла в Windows, а затем в Linux. Как я могу удалить все это автоматически?

возможный дубликатConvert DOS line endings to Linux line endings in vim cfi
Это связано с тем, что в Windows используется двухсимвольная последовательность (обычно пишется "\ r \ n") для представления переноса строки, а в UNIX / Linux используется только второй символ "\ n". представлять разрыв строки. Поэтому, когда вы редактируете текстовый файл Windows в редакторе Linux, редактор видит дополнительные символы, которые он не считает частью разрывов строк, поэтому он пытается их отобразить, и в результате получается ^ M. David Z
Это немного больше, Дэвид. Vim с удовольствием отредактирует текстовый файл с окончанием строки DOS, не показывая все эти^Ms. Единственное указание, которое вы имеете при редактировании текстового файла DOS в Vim, это если у вас есть%{&ff} в вашемstatusline значение опции. Vim показывает^M когда стиль окончания строкиmixed, Это означает, что вы использовали текстовый редактор, который не так удобен, как Vim, который не следовал существующему стилю окончания строки, как Vim по умолчанию. Если вы используете Vim или что-то еще его калибра в Windows, вы не получите таких окончаний строк. Warren Young

Ваш Ответ

8   ответов
6

Сначала найдите все совпадения

:%s/^M//

(Получить^Mнажмите ^ V ^ M, где ^Ctrl на большинстве клавиатур)

Затем заменить на новые строки

:%s//\r/g

Комбинированная команда будет:

:%s/^M/\r/g
Спасибо, интересно, как на самом деле ввести Ctrl-M в поиске-замене!
1

возможно, была передача по FTP. Когда вы отправляете эти файлы по FTP из одного ящика в другой, обязательно используйте передачу ASCII. Используйте команду & quot; ASC. & Quot;

120

В качестве команды введите

:%s/^M$//

(Чтобы получить ^ M, нажмите ^ V ^ M, где ^ - это CTRL на большинстве клавиатур)

не знал, что Гленн, спасибо за подсказку
Или сохранение персонажа::%s/\r$
также:% s / \ r $ // чтобы избежать хлопот ^ V ^ M
@sehe технически спасает 2 персонажа :)
33

Вы можете сделать это:

:set fileformats=dos

Это скроет^Mбез касания файла.

Если не существует смеси строк формата DOS и Unix :-(
16

dos2unix это должно лишить их для вас. В Windows используются разные символы конца строки, поэтому это происходит.

81

ff опция:

:set ff=unix
:wq

Теперь ваш файл вернулся к старому-доброму-Unix-способу.

Если хотитеadd В конце строки DOS (чтобы принтер был доволен или передавал файлы друзьям из Windows, у которых нет хороших инструментов), вы можете легко пойти в обратном направлении:

:set ff=dos
:wq
Казалось бы, мерзавец слишком глуп, чтобы обнаружить это как изменение одного символа. Я запустил это в Vim иgit diff показывает каждую удаленную строку и каждую добавленную строку: /
Vim не нашел бы ^ M или \ r, но это сработало для меня! Спасибо @sarnold
Томми, это ограничение наdiff, не наgit.
vim не нашел ни ^ m, ни \ r, ни любых других окончаний строки, но это сработало. Спасибо :)
2

fromdos до их открытия.fromdos является частьюtofrodos пакет.

0
" put this in your ~/.vimrc file and :source ~/.vimrc
" then you can do: Dos2Unix
" dos2unix ^M
fun! Dos2unixFunction()
    let [email protected]/
    let l = line(".")
    let c = col(".")
    try
        set ff=unix
        w!
        "%s/\%x0d$//e
    catch /E32:/
        echo "Sorry, first save the file."
    endtry
    let @/=_s
    call cursor(l, c)
endfun
com! Dos2Unix keepjumps call Dos2unixFunction()

Похожие вопросы