@LightnessRacesinOrbit - Хм, теперь тоже работает с формами. Я отозвал свой комментарий, сказав, что ссылка мертва.
ArtOfWarfare
3
Зеркало для ссылки @LightnessRacesinOrbit, которая в данный момент недоступна
alexpls
4
Печатание :digraphsв vim показывает таблицу-график, с которой связана @LightnessRacesinOrbit.
Askewchan
1
При попытке заменить этот тип персонажа с помощью php, попробуйте это preg_replace('/[\x01]/', ' ' ,$str); Надеюсь, это поможет.
Рэйчел Геллер,
Ответы:
561
Unix использует 0xA для символа новой строки. Windows использует комбинацию из двух символов: 0xD 0xA. 0xD - символ возврата каретки. ^Mслучайно vim отображает 0xD (0x0D = 13, M - 13-я буква в английском алфавите).
Вы можете удалить все ^Mсимволы, выполнив следующее:
:%s/^M//g
Куда ^Mвводится, удерживая Ctrlи печатая, vзатем m, а затем отпуская Ctrl. Это иногда сокращается как ^V^M, но учтите, что вы должны вводить его, как описано в предыдущем предложении, а не печатать его буквально.
Это выражение заменит все вхождения ^Mс пустой строкой (т.е. ничего). Я использую это, чтобы избавиться от ^Mфайлов, скопированных из Windows в Unix (Solaris, Linux, OSX).
На всякий случай, если вы работаете в Windows, Ctrl + V, вероятно, будет отображен для вставки. В этом случае значения по умолчанию переназначают «escape-код специального символа» на Ctrl + Q.
Р. Мартиньо Фернандес
8
На самом деле вопрос в том, почему Vim иногда автоматически определяет окончания строк и правильно отображает их, а иногда нет.
Скотт
10
Вы увидите ^Mсимвол, если файл не соответствует концу строки. Используйте команду, предоставленную Tomasz, затем введите, в :fileformat={unix|dos|mac}зависимости от того, на какую ОС вы ориентируетесь. Если есть только несколько строк без ^Mсимвола, вы, вероятно, хотите :fileformat=dos. Если вы редактируете файлы в редакторе, отличном от vim, убедитесь, что он настроен на совпадение с окончанием строки (Блокнот этого не сделает, но подойдет любой уважаемый редактор, например Notepad ++ или TextMate).
Миккель Полсон,
9
Примечание для начинающих vi: эту команду нужно вводить вручную. Просто вставив его в открытый терминал с viзапущенным, вы получите ошибку «шаблон не найден».
IQAndreas
51
@bluesm Я действительно должен был использовать, :%s/\r//gчтобы заменить возврат каретки в моем файле. Не удалось найти шаблон ^ V ^ M в файле, в котором была куча символов ^ M.
jonnybot
140
:%s/\r//g
работал на меня сегодня. Но моя ситуация, возможно, была немного другой.
опция g не требуется, в каждой строке только одна новая строка. :%s/\r//было бы достаточно.
frogcoder
7
Опция g вполне может потребоваться, потому что возврат каретки не обязательно является новой строкой. При открытии в режиме Unix возврат каретки является просто еще одним символом, а при открытии в режиме Windows возврат каретки только специальный, после которого следует перевод строки.
Что это на самом деле должно делать? Для меня это выглядит так, как будто он заменяет подобное, но я не могу себе представить, что это что-то изменит. Я что-то упускаю из-за того, как здесь работает синтаксис?
Платиновая Лазурь
16
@PlatinumAzure Я не знаю, почему никто никогда не думал ответить на ваш вопрос. \rимеет другое поведение в поисковой части по сравнению с заменой. См. Например, stackoverflow.com/a/3834303 .
Я получил текстовый файл, изначально сгенерированный на компьютере Windows с помощью пользователя Mac, и мне нужно было импортировать его в БД Linux MySQL с помощью load dataкоманды.
Хотя VIM отображал символ «^ M», ни одно из вышеперечисленного не помогло мне в решении конкретной проблемы, данные могли импортироваться, но всегда были каким-то образом повреждены. В конце концов, решение было довольно простым (после большого разочарования).
Решение: выполнение dos2unixДВАЖДЫ на одном и том же файле сделало свое дело! Использование fileкоманды показывает, что происходит на этом пути.
$ file 'file.txt'
file.txt: ASCII text, with CRLF, CR line terminators
$ dos2unix 'file.txt'
dos2unix: converting file file.txt to UNIX format ...
$ file 'file.txt'
file.txt: ASCII text, with CRLF line terminators
$ dos2unix 'file.txt'
dos2unix: converting file file.txt to UNIX format ...
$ file 'file.txt'
file.txt: ASCII text
И финальная версия файла отлично импортируется в базу данных.
Если это нарушает вашу конфигурацию, и в сопоставлениях требуются символы ^ M, вы можете просто заменить символы ^ M на <Enter>или даже <C-m>(оба типа - простые последовательности символов, соответственно 7 и 5 символов).
Это единственный рекомендуемый, переносимый способ хранения специальных кодов клавиш в сопоставлениях.
Если вы не указали другое fileformatнамеренно (скажем, :e ++ff=unixдля файла Windows), вероятно, целевой файл имеет смешанные EOL.
Например, если файл имеет несколько строк с <CR><NL>окончаниями, а другие - с
<NL>окончаниями, и Vim при его чтении автоматически fileformatустановит unixего ^M (<CR>). В таких случаях fileformatsвступает в игру. Смотрите :help ffsподробности.
Я обнаружил, что я загрязнял файлы в течение нескольких недель из-за того, что мой экземпляр Homebrew Mvim был настроен на использование filetype = dos. Сделано необходимое изменение в .vimrc ....
:digraphs
в vim показывает таблицу-график, с которой связана @LightnessRacesinOrbit.preg_replace('/[\x01]/', ' ' ,$str);
Надеюсь, это поможет.Ответы:
Unix использует 0xA для символа новой строки. Windows использует комбинацию из двух символов: 0xD 0xA. 0xD - символ возврата каретки.
^M
случайно vim отображает 0xD (0x0D = 13, M - 13-я буква в английском алфавите).Вы можете удалить все
^M
символы, выполнив следующее:Куда
^M
вводится, удерживая Ctrlи печатая, vзатем m, а затем отпуская Ctrl. Это иногда сокращается как^V^M
, но учтите, что вы должны вводить его, как описано в предыдущем предложении, а не печатать его буквально.Это выражение заменит все вхождения
^M
с пустой строкой (т.е. ничего). Я использую это, чтобы избавиться от^M
файлов, скопированных из Windows в Unix (Solaris, Linux, OSX).источник
^M
символ, если файл не соответствует концу строки. Используйте команду, предоставленную Tomasz, затем введите, в:fileformat={unix|dos|mac}
зависимости от того, на какую ОС вы ориентируетесь. Если есть только несколько строк без^M
символа, вы, вероятно, хотите:fileformat=dos
. Если вы редактируете файлы в редакторе, отличном от vim, убедитесь, что он настроен на совпадение с окончанием строки (Блокнот этого не сделает, но подойдет любой уважаемый редактор, например Notepad ++ или TextMate).vi
: эту команду нужно вводить вручную. Просто вставив его в открытый терминал сvi
запущенным, вы получите ошибку «шаблон не найден».:%s/\r//g
чтобы заменить возврат каретки в моем файле. Не удалось найти шаблон ^ V ^ M в файле, в котором была куча символов ^ M.работал на меня сегодня. Но моя ситуация, возможно, была немного другой.
источник
:%s/\r//
было бы достаточно.Чтобы перевести новую строку вместо ее удаления:
источник
\r
имеет другое поведение в поисковой части по сравнению с заменой. См. Например, stackoverflow.com/a/3834303 .:%s/^V^M/^V^M/g
смотрите здесь:%s/\r//g
Это, вероятно, означает, что у вас есть возврат каретки (разные операционные системы используют разные способы сигнализации конца строки).
Используйте
dos2unix
для исправления файлов или установки форматов файлов в vim:источник
Допустим, ваш текстовый файл - file.txt, а затем выполните эту команду -
Он преобразует текстовый файл из DOS в формат Unix.
источник
Я получил текстовый файл, изначально сгенерированный на компьютере Windows с помощью пользователя Mac, и мне нужно было импортировать его в БД Linux MySQL с помощью
load data
команды.Хотя VIM отображал символ «^ M», ни одно из вышеперечисленного не помогло мне в решении конкретной проблемы, данные могли импортироваться, но всегда были каким-то образом повреждены. В конце концов, решение было довольно простым (после большого разочарования).
Решение: выполнение
dos2unix
ДВАЖДЫ на одном и том же файле сделало свое дело! Использованиеfile
команды показывает, что происходит на этом пути.И финальная версия файла отлично импортируется в базу данных.
источник
В Unix, вероятно, проще использовать команду «tr».
источник
Я удалил их все с помощью sed:
sed -i -e 's/\r//g' <filename>
Можно также заменить другой строкой или символом:
sed -i -e 's/\r/string/g' <filename>
Эти
sed
команды работают в версии GNU / Linux,sed
но могут потребовать настройки на BSD (включая macOS).источник
Вы можете исправить это в VIM, используя
где ^ - управляющий символ.
источник
^M
есть.Это единственное, что сработало в моем случае:
:e ++ff=dos
:wq
источник
Если это нарушает вашу конфигурацию, и в сопоставлениях требуются символы ^ M, вы можете просто заменить символы ^ M на
<Enter>
или даже<C-m>
(оба типа - простые последовательности символов, соответственно 7 и 5 символов).Это единственный рекомендуемый, переносимый способ хранения специальных кодов клавиш в сопоставлениях.
источник
В FreeBSD вы можете очистить
^M
вручную, набрав следующее::%s/
Ctrl+ V, затем Ctrl+ M, затем Ctrl+ Mснова.источник
Если вы не указали другое
fileformat
намеренно (скажем,:e ++ff=unix
для файла Windows), вероятно, целевой файл имеет смешанные EOL.Например, если файл имеет несколько строк с
<CR><NL>
окончаниями, а другие - с<NL>
окончаниями, и Vim при его чтении автоматическиfileformat
установитunix
его^M (<CR>)
. В таких случаяхfileformats
вступает в игру. Смотрите:help ffs
подробности.источник
Я обнаружил, что я загрязнял файлы в течение нескольких недель из-за того, что мой экземпляр Homebrew Mvim был настроен на использование filetype = dos. Сделано необходимое изменение в .vimrc ....
источник
Попробуйте, по
:%s/\^M//
крайней мере, это сработало для меня.источник