Как преобразовать разрыв строки ^ M в «нормальный» перевод строки в файле, открытом в vim?

В моем случае я сделал

$ npm update

Это должно включать в себя fabric-client@1.1.2 (at DateTime.Now = Jun / 09/2018)

463
задан oberlies 5 March 2014 в 11:38
поделиться

9 ответов

«Эта функция сохраняет список переходов

fun! Dos2unixFunction()
let _s=@/
let l = line(".")
let c = col(".")
try
    set ff=unix
    w!
    "%s/\%x0d$//e
catch /E32:/
    echo "Sorry, the file is not saved."
endtry
let @/=_s
call cursor(l, c)
endfun
com! Dos2Unix keepjumps call Dos2unixFunction()
0
ответ дан SergioAraujo 5 March 2014 в 11:38
поделиться

Ничто из вышеперечисленного не помогло мне. (замена на \ r, ^ M, ctrl-v-ctrl-m) Я использовал копирование и вставку, чтобы вставить свой текст в новый файл.

Если у вас есть макросы, которые мешают, вы можете попробовать :set paste до операции вставки и :set nopaste после.

0
ответ дан statueofmike 5 March 2014 в 11:38
поделиться

Для того, чтобы символ ^ M соответствовал, мне пришлось визуально выбрать его, а затем использовать команду «Копировать в буфер обмена» для его извлечения. Вы можете проверить это, выполнив поиск символа, прежде чем пытаться выполнить команду замены.

/^M

следует выбрать первую неверную строку

:%s/^M/\r/g

заменит все ошибочные ^ M на возврат каретки.

Это как функции в MacVim, который основан на gvim 7.

РЕДАКТИРОВАТЬ:

Повторно возникла эта проблема на моем компьютере с Windows 10, на котором установлена ​​Ubuntu для Windows, и я думаю, что это вызывает проблемы с форматированием файлов для vim. В этом случае изменение ff на unix, mac или dos ничего не изменило, кроме как изменить ^ M на ^ J и обратно.

Решение в этом случае:

:%s/\r$/ /g
:%s/ $//g

Причина, по которой я пошел по этому пути, заключается в том, что я хотел убедиться, что я был неразрушающим с моим файлом. Я мог бы :%s/\r$//g, но это удалило бы возврат каретки сразу, и могло бы иметь неожиданные результаты. Вместо этого мы преобразуем единственный символ CR, здесь символ ^ M, в пробел, а затем удаляем все пробелы в конце строк (что для меня является желательным результатом независимо)

Извините за возрождение старого вопроса на это уже давно дан ответ, но, похоже, в замешательстве возникла некоторая путаница, и я подумал, что помогу кое-что прояснить, так как это происходит в поиске в Google.

28
ответ дан Metagrapher 5 March 2014 в 11:38
поделиться

В качестве альтернативы, существуют утилиты с открытым исходным кодом, называемые dos2unix и unix2dos, которые делают именно эту вещь. В системе Linux они, вероятно, установлены по умолчанию; для системы Windows вы можете загрузить их с http://www.bastet.com/ и др.

5
ответ дан ConcernedOfTunbridgeWells 5 March 2014 в 11:38
поделиться

В моем случае

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

tr "\015" "\n" < inputfile > outputfile

У меня был файл, в котором символы ^ M были переключены между строками примерно так, как показано ниже

Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKT6TG,TRO_WBFB_500,Trico,CARS,Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKTG0A,TRO_WB_T500,Trico,
7
ответ дан Vishwanath gowda k 5 March 2014 в 11:38
поделиться

В vim посмотрите формат файла - DOS или Unix:

: set filetype = unix

: set fileformat = unix

Файл будет записан без символов возврата каретки (CR, ^ M).

183
ответ дан 22 November 2019 в 22:49
поделиться

В Linux и Mac OS работает следующая

:%s/^V^M/^V^M/g

, где ^ V ^ M означает тип Ctrl + V , затем Ctrl + M .

Примечание: в Windows вы, вероятно, захотите использовать ^ Q вместо ^ V , поскольку по умолчанию ^ V сопоставляется для вставки текста.

418
ответ дан 22 November 2019 в 22:49
поделиться

^ M извлекается с помощью Ctrl + V и M , как и

s/^M//g
15
ответ дан 22 November 2019 в 22:49
поделиться

Команда

:%s/<Ctrl-V><Ctrl-M>/\r/g

Где означает введите Ctrl + V , затем Ctrl + M .

Объяснение

:%s

замена,% = все строки

<Ctrl-V><Ctrl-M>

^ M символы (Ctrl-V - это способ Vim для записи символа Ctrl ^, а Ctrl-M записывает M после регулярного выражения, в результате получается ^ M специальный символ)

/\r/

с новой строкой ( \ r )

g

И сделать это глобально (а не только первое вхождение в строке).

562
ответ дан 22 November 2019 в 22:49
поделиться
Другие вопросы по тегам:

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