




:%s/\r\+//g
В Vim это удаляет все символы возврата каретки и оставляет только символы новой строки.
По какой-то причине вышеупомянутое не работало у меня под windows gvim. Но когда поменяли на :%s/\r//g, все заработало отлично.
@soltysh:% s / \ r \ + $ // g
:g/Ctrl-v Ctrl-m/s///
CtrlM - это символ \r или возврат каретки, добавляемый в конце строки DOS. CtrlV сообщает Vim, что нужно вставить буквальный символ CtrlM в командную строку.
В целом эта команда заменяет все \r ничем, удаляя их с концов строк.
Разработано в Ответ Даннида.
dos2unix - это утилита командной строки, которая сделает это, или :%s/^M//g, если вы используете Ctrl-vCtrl-m для ввода ^ M, или вы можете :set ff=unix и Vim сделает это за вас.
Есть документация по настройке формат файла, а в вики Vim есть исчерпывающий страница в строке, завершающие конверсии.
В качестве альтернативы, если вы часто перемещаете файлы вперед и назад, вы можете не захотеть их преобразовывать, а лучше использовать :set ff=dos, чтобы Vim знал, что это файл DOS, и использовал соглашения DOS для окончаний строк.
Вот и все, спасибо, приятель:> Bash не запускал скрипт из-за окончания строки. Тупой блокнот действительно ...
:%s/^M//g должен быть :%s/\r//g, потому что ^M означает просто «сопоставить заглавную букву« M »в начале строки».
Нет, если вы сделаете так, как сказано в ответе, и «используйте ctrl-v ctrl-m для ввода ^ M».
:%s/\r//g worked for me, cheers @Bunyk
Я запутался, когда попробовал это, потому что казалось, что на преобразование уходит много времени, тогда как на самом деле он просто ждал ввода пользователя.
dos2unix может быть лучшим решением, но только если он присутствует в системе. Я не думаю, что мы должны давать ответ с его помощью. set ff=unix кажется лучшим ответом.
Должно быть, мне чего-то не хватает, потому что set ff=unix ничего не делает. Возможно, он конвертирует файл, но все символы ^M все еще там.
Если вы хотите сохранить новые строки, лучше всего это сделать:% s / \ r / \ r / g unix / vim вставит правильный символ новой строки с заменой \ r
как ^M (Ctrl + V Ctrl + M), так и \r не найдены в моем файле, но я определенно вижу их в diff (VIM - Vi IMproved 7.4)
:%s/\r//g или :%s/^M//g не работают. :set ff=unix работает по желанию. Но он форматирует весь файл, а не только те строки, которые содержат ^ m
Существует хороший источник для изменения или преобразования из Windows в UNIX.
@felwithe -: set ff = unix, затем вы: wq файл для записи нового формата. Я сделал это две минуты назад, чтобы очистить файл, полученный от разработчика.
Используйте команду vim set, чтобы показать формат файла :set ff?. Команда возвращает fileformat = <dos / unix / mac>, чтобы определить текущий формат файла.
Вы можете использовать следующую команду: :%s/^V^M//g
, где "^" означает использование ключа CTRL.
С помощью следующей команды:
:%s/^M$//g
Чтобы отобразить ^M, введите CtrlV, а затем CtrlM. CtrlV сообщает Vim, что следующий введенный символ следует воспринимать буквально.
От: Формат файла
[Esc]:% s / \ r $ //
+1 за указание на официальный сайт документации. Для всех, кто использует указанную выше ссылку, см. Раздел «Преобразование текущего файла» на этой странице.
Это + vim -b <filename> сработало как шарм, спасибо, +1
Ссылка наполовину разорвана. Он перенаправляет на другую страницу.
Я предпочитаю использовать следующую команду:
:set fileformat=unix
Вы также можете использовать mac или dos для преобразования файла соответственно в формат Mac или MS-DOS / Windows. И ничего не делает, если файл уже имеет правильный формат.
Для получения дополнительной информации см. Справку по Vim:
:help fileformat
Эта команда, похоже, ничего не делает в моем Windows vim. В моем представлении все еще есть символы ^M.
Добавление set fileformat=unix в мой файл .vimrc сработало.
:set fileformat=unix для преобразования из DOS в Unix.
Это действительно решило проблему для меня. Мне не удалось найти этих персонажей во время поиска.
Измените окончания строк в представлении:
:e ++ff=dos
:e ++ff=mac
:e ++ff=unix
Это также можно использовать как операцию сохранения (одна только команда: w не сохранит, используя окончания строк, которые вы видите на экране):
:w ++ff=dos
:w ++ff=mac
:w ++ff=unix
И вы можете использовать его из командной строки:
for file in *.cpp
do
vi +':w ++ff=unix' +':q' "$file"
done
Большое спасибо. Я пробовал vi + ': wq ++ ff = unix' <filepath> для ленивого вроде меня.
Это должен быть самый популярный ответ. :w +ff=unix намного лучше, чем большинство других вещей, написанных здесь, и сценарий bash - приятный бонус.
Команды :e, похоже, ничего не делают в моей установке Windows vim. Мой вид по-прежнему показывает коды ^M.
Я повсюду читал :e ++ff=unix, но для меня самый простой, который сработал, - это :w ++ff=unix, затем выйдите и снова откройте файл.
@OlivierPons, но: e делает то же самое, что и повторно открывает файл? Как добавление дополнительных ненужных шагов к вашему решению упрощает его?
Я обычно использую
:%s/\r/\r/g
что кажется немного странным, но работает из-за того, как Vim сопоставляет перевод строки. Мне тоже легче запомнить :)
Это работает последовательно на разных платформах. Лучший ответ здесь.
У меня никогда раньше не было проблем с :set ff=unix, но файл, который я открыл сегодня, должен быть особенно странным. Vim сказал, что это уже fileformat=unix, но все окончания строк были ^M. Это решение сработало для меня.
Это решение добавляет мне ненужные лишние строки, удваивая количество строк в файле. :%s/\r//g вместо этого работает у меня.
Виктор, у ваших файлов скорее всего \ r \ n окончания. \ r не читается как новая строка, а \ n -. В файлах, с которыми я сталкиваюсь, есть \ r, и вам нужно добавить символ новой строки.
astyle, dos2unix, vim fileformat, notepad, ultra-edit и т. д. не работали; это сделал! Перед тем, как попробовать это, мне пришлось открыть файл в Wordpad, вставить в блокнот, а затем вставить в ultraedit, прежде чем я смог вернуться в VIM. Кто-то поместил различные типы типов перевода строки и EOF в файлы, что затем затруднило поиск, где в исходных текстах находятся вызовы функций. grep вернул нежелательную запись для файла со смешанными типами перевода строки и EOF. Разочарован тем, что другие методы не работают. Спасибо за простое решение!
Я пробовал другие решения здесь, но это единственное, что сработало для меня. Я импортировал файл CSV в Excel (Mac OS X) и, немного преобразовав его, экспортировал как CSV. В итоге получился однострочный файл с ^M, разделяющим исходные строки.
Я недостаточно энергичен, чтобы понять, почему, но это решение работает для меня в обстоятельствах, когда принятый ответ не удался.
Когда вы делаете hexdump -C badfile, вы можете увидеть шестнадцатеричную последовательность 0x0d 0x0a, которая является вашей проблемой.
:%s/\r//g @ VictorZamanian - это универсальное решение Только, особенно для файлов смешанного режима, содержащих гетерогенную смесь символов новой строки в стиле DOS и UNIX. Канонические решения (например, :set ff=unix, :e ++ff=unix) предполагают, что каждая строка текущего буфера заканчивается одним и тем же стилем новой строки. Иногда они это делают; иногда они этого не делают. Cue sadface.
Метод @VictorZamanian, это должен помочь решить проблему с добавлением новых строк.
@VictorS. ? У меня не было проблем с добавлением новой строки. У меня есть дополнительные символы новой строки, которые мне нужны не сделал. И если вы дочитаете мой комментарий до конца, то увидите, что у меня уже есть решение. Спасибо хоть.
Обычно для этого можно использовать команду dos2unix. Просто убедитесь, что вы прочитали руководство, так как версии GNU и BSD различаются по тому, как они обрабатывают аргументы.
Версия BSD:
dos2unix $FILENAME $FILENAME_OUT
mv $FILENAME_OUT $FILENAME
Версия GNU:
dos2unix $FILENAME
В качестве альтернативы вы можете создать свой собственный dos2unix с любым из предложенных здесь ответов, например:
function dos2unix(){
[ "${!}" ] && [ -f "{}" ] || return 1;
{ echo ':set ff=unix';
echo ':wq';
} | vim "";
}
dos2unix может напрямую изменять содержимое файла.
Вы можете напрямую использовать его в файле без необходимости перенаправления временного файла.
dos2unix input.txt input.txt
Вышеуказанное использует предполагаемую клавиатуру США. Используйте опцию -437 для использования клавиатуры Великобритании.
dos2unix -437 input.txt input.txt
Следующие шаги могут преобразовать формат файла для 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.
Ссылка: Формат файла
Ссылка наполовину разорвана. Он перенаправляет на другую страницу.
tr -d '' < winfile.txt > unixfile.txt
(См .: Преобразование между текстовыми файлами Unix и Windows)
Комментарий о появлении ^ M сработал для меня. Просто набрав "^ M" в моем vi, я ничего не получил (не нашел). Последовательность CTRL + VCTRL + M справилась с этим отлично.
Моя рабочая команда замены была
:%s/Ctrl-V Ctrl-M/\r/g
и на моем экране это выглядело так:
:%s/^M/\r/g
@ 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 (не вводите просто символ каретки «^» и M).
Приведенная ниже команда используется для переформатирования всего файла .sh в текущем каталоге. Тестировал на своей ОС Fedora.
for file in *.sh; do awk '{ sub("\r$", ""); print }' $file >luxubutmp; cp -f luxubutmp $file; rm -f luxubutmp ;done
Из Викии:
%s/\r\+$//g
При этом будут найдены все знаки возврата каретки (одно или несколько повторений) до конца строки и будут удалены, так что только \n останется в EOL.
Я нашел очень простой способ: открыть файл с помощью нано: nano file.txt
Нажмите Ctrl + O для сохранения, но перед нажатием Enter нажмите: Alt + D для переключения между окончаниями строк DOS и Unix / Linux или: Alt + M для переключения между Mac и Unix / Linux, а затем нажмите Enter для сохранения и Ctrl + X для выхода.
сделал это на сервере linux, файл имел окончания ^M. сохранить как dos, сохранить, сохранить как linux, чтобы удалить. можно проверить с помощью cat -v
Этот вопрос касается vim, а не nano.
Это мой путь. Я открыл файл в DOS EOL, и когда я сохраню файл, он автоматически преобразуется в Unix EOL:
autocmd BufWrite * :set ff=unix
Я хотел новые строки вместо ^ M. Perl спешит на помощь:
perl -pi.bak -e 's/\x0d/\n/g' excel_created.txt
Или написать в stdout:
perl -p -e 's/\x0d/\n/g' < excel_created.txt
Если вы создадите файл в Блокноте или Блокнот ++ в Windows, перенесете его в Linux и откроете с помощью Vim, вы увидите ^ M в конце каждой строки. Чтобы удалить это,
В терминале Linux введите
dos2unix filename.ext
Это произведет необходимую магию.
Я знал, что где-то видел это. Вот совет по входу в систему FreeBSD:
Вам нужно удалить все эти символы ^ M из файла DOS? Пытаться
tr -d \r < dosfile > newfile
-- Originally by Dru <[email protected]>
В Vim введите:
:w !dos2unix %
Это передаст содержимое вашего текущего буфера команде dos2unix и запишет результаты поверх текущего содержимого. После этого Vim попросит перезагрузить файл.
Для запуска непосредственно в консоли Linux:
vim file.txt +"set ff=unix" +wq
В VIM:
:e ++ff=dos | set ff=unix | w!
В оболочке с VIM:
vim some_file.txt +'e ++ff=dos | set ff=unix | wq!'
e ++ff=dos - принудительно открыть файл в формате dos.
set ff=unix - конвертировать файл в формат unix.
Если вы делаете
hexdump -C badfileи видите0x0d 0x0a"\r\n", это ваша проблема.