Преобразование окончаний строк DOS в окончание строк Linux в vim

Если я открываю файлы, созданные в Windows, все строки заканчиваются на ^M.
Как удалить эти символы одновременно?

Ответ 1

dos2unix - это утилита командной строки, которая сделает это, или :%s/^M//g, если вы используете Ctrl - v Ctrl - m, чтобы ввести ^ M, или вы можете :set ff=unix, и vim сделает это за вас.

Документы в настройке 'fileformat' здесь, а vim wiki имеет всеобъемлющий страница по завершению конвертации.

В качестве альтернативы, если вы много перемещаете файлы туда и обратно, вам может не захотеть их преобразовать, а сделать :set ff=dos, поэтому vim будет знать это файл DOS и использовать соглашения DOS для окончаний строк.

Ответ 2

Измените вид в представлении:

:e ++ff=dos
:e ++ff=mac
:e ++ff=unix

Это также можно использовать в качестве операции сохранения (только: w не будет сохраняться с использованием выводов, отображаемых на экране):

:w ++ff=dos
:w ++ff=mac
:w ++ff=unix

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

for file in $(ls *cpp)
do 
  vi +':w ++ff=unix' +':q' ${file}
done

Ответ 3

Обычно я использую

:%s/\r/\r/g

который кажется немного странным, но работает из-за того, как vim соответствует линейным переводам. Мне также легче запомнить:)

Ответ 4

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

:set fileformat=unix

Вы также можете использовать mac или dos для конвертации вашего файла в Macintosh или в соглашение о файлах MS-DOS/MS-Windows. И он ничего не делает, если файл уже находится в правильном формате.

Для получения дополнительной информации см. справку vim:

:help fileformat

Ответ 5

:%s/\r+//g

В Vim, который удаляет все возвраты каретки и оставляет только символы новой строки.

Ответ 6

:set fileformat=unix для преобразования из dos в unix.

Ответ 8

dos2unix может напрямую изменять содержимое файла.

Вы можете напрямую использовать его в файле, без необходимости перенаправления временных файлов.

dos2unix input.txt input.txt

В приведенном выше примере используется предполагаемая клавиатура США. Используйте опцию - 437 для использования британской клавиатуры.

dos2unix -437 input.txt input.txt

Ответ 9

Преобразование каталога файлов из dos в Unix

Используя командную строку и sed, найдите все файлы в текущем каталоге с расширением ".ext" и удалите все "^ M",

@https://gist.github.com/sparkida/7773170

find $(pwd) -type f -name "*.ext" | while read file; do sed -e 's/^M//g' -i "$file"; done;

также, как указано выше ^ M= Ctrl + V + Ctrl + M (не просто набирайте символ "^" и "М")

Ответ 11

С помощью следующей команды:

:%s/^M$//g 

Получите ^M чтобы отобразить тип Ctrl V, затем Ctrl M. Ctrl V говорит Vim, чтобы следующий символ был введен буквально.

Ответ 12

Следующие шаги могут преобразовать формат файла для dos в unix:

:e ++ff=dos  Edit file again, using dos file format ('fileformats' is ignored).[A 1]
:setlocal ff=unix    This buffer will use LF-only line endings when written.[A 2]
:w   Write buffer using unix (LF-only) line endings.

Ссылка: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix

Ответ 13

:g/Ctrl-v Ctrl-m/s///

Ctrl M - символ \r или возврат каретки, который добавляет конец строки DOS. Ctrl V сообщает vim вставить буквальный символ Ctrl M в командной строке.

Взятый в целом, эта команда заменяет все \r ничем, удаляя их из концов строк.

Ответ 14

Комментарий о том, чтобы получить ^ М для отображения, - это то, что сработало для меня. Простое написание "^ M" в моей vi ничего не получилось (не найдено). Последовательность CTRL + V CTRL + M сделала это отлично.

Моя рабочая команда замены была

:1,$s/Ctrl-V Ctrl-M/\r/g

и это выглядело так на экране:

:1,$s/^M/\r/g

Ответ 15

Вы можете использовать:

vim somefile.txt +"%s/\r/\r/g" +wq

или dos2unix utility.

Ответ 16

Вы можете использовать следующую команду:
:%s/^V^M//g
где "^" означает использование клавиши CTRL.

Ответ 17

Я нашел очень простой способ: откройте файл с помощью nano: nano file.txt

Нажмите CTRL + O для сохранения, но перед нажатием Enter нажмите: ALT + D для переключения между линиями DOS и Unix/Linux или: ALT + M для переключения между линиями Mac и Unix/Linux, затем нажмите Enter для сохранения и CTRL + X, чтобы выйти.

Ответ 18

ниже команда используется для переформатирования всего файла .sh в текущем каталоге, я протестировал его на своей Fedora OS.

for file in *.sh; do awk '{ sub("\r$", ""); print }' $file >luxubutmp; cp -f luxubutmp $file; rm -f luxubutmp ;done

Ответ 19

Обычно существует команда dos2unix, которую вы можете использовать для этого, просто убедитесь, что вы читаете руководство, поскольку версии GNU и BSD отличаются тем, как они относятся к аргументам.

Версия BSD:

dos2unix $FILENAME $FILENAME_OUT
mv $FILENAME_OUT $FILENAME

Версия GNU:

dos2unix $FILENAME

В качестве альтернативы вы можете создать свой собственный dos2unix с любым из предложенных здесь ответов, например:

function dos2unix(){
    [ "${!}" ] && [ -f "{$1}" ] || return 1;

    { echo ':set ff=unix';
      echo ':wq';
    } | vim "${1}";
}

Ответ 20

Я знал, что видел это где-то. Вот подсказка для входа FreeBSD:

Нужно удалить все эти ^ M-символы из файла DOS? Попробуйте

tr -d \\r < dosfile > newfile
    -- Originally by Dru <[email protected]>

Ответ 21

В vim введите:

:w !dos2unix %

Это будет передавать содержимое вашего текущего буфера команде dos2unix и записывать результаты по текущему содержимому. Vim попросит перезагрузить файл после

Ответ 22

Хотя эта тема очень старая, я хотел бы добавить еще один материал из wikia:

%s/\r\+$//g

чтобы заполнить все знаки возврата каретки (один и несколько повторений) до конца строки и удалить, поэтому просто \n останется на уровне eol.

Ответ 23

Это мой путь. Я открыл файл в dos EOL, и когда я сохраню файл, который автоматически преобразуется в unix EOL

autocmd BufWrite * :set ff=unix

Ответ 24

Мне нужны новые строки вместо M. Perl для спасения:

perl -pi.bak -e 's/\x0d/\n/g' excel_created.txt

Или записать в stdout:

perl -p -e 's/\x0d/\n/g' < excel_created.txt

Ответ 25

если вы создаете файл в NotePad или NotePad ++ в Windows и переносите его в Linux и открываете его с помощью vim, вы увидите ^ M в конце каждой строки. Чтобы удалить это,

На вашем Linux-терминале введите

dos2unix filename.ext

Это сделает требуемую магию.