Команда:
sed -i 's/foo.*/goo/' textfile
удалили \r
от конца строки, поскольку \r
просто произвольный символ для СЭД на UNIX, соответствует по .*
.
Похоже, что Vim достаточно умен, чтобы не отображать возврат каретки стиля^M для Windows, если они используются последовательно в файле. Из-за вышеупомянутой команды sed они не используются последовательно, поскольку они удаляют только \r
из линий, соответствующих foo.*
.
Если это проблема для вас, я рекомендую использовать:
sed -i 's/foo.*/goo\r/' textfile
sydill's comment указал мне на правый раздел руководства, который описывает такое поведение: :help file-formats
:
... Если вы начнете редактировать новый файл, а параметр «fileformats» не пуст (который по умолчанию), Vim попытается определить, будут ли строки в файле ar e, разделенные указанными форматами. Если установлено значение «unix, dos», Vim будет проверить линии с одним (как используется в Unix и Amiga) или с помощью пары (MS-DOS). Только когда ВСЕ строки заканчиваются, 'fileformat' установлен в на "dos", в противном случае он установлен в "unix". Когда «fileformats» включает в себя «mac», и никакие символы не найдены в файле, «fileformat» установлен на «mac». ...
Это отвечает на мой вопрос и предлагает решение проблемы. Спасибо! – gortsu
Это именно то, что происходит, но, возможно, может быть сформулировано _consistently_ вместо _concess_? Существует полезный абзац в ': h файлах-форматах', который я бы добавил к этому ответу (если вы начнете редактирование ... Только когда все строки заканчиваются на, 'fileformat' установлен в" dos ", в противном случае он установлен в «unix») –
sidyll
Позвольте мне изменить/добавить это. Спасибо за комментарий! – hek2mgl