Я намагаюся замінити кожен ,
в поточному файлі на новий рядок:
:%s/,/\n/g
Але він вставляє те, що виглядає як ^@
замість справжнього нового рядка. Файл не перебуває у режимі DOS абощо.
Що мені слід зробити?
Якщо вам цікаво, як і мені, перевірте також питання Чому \r є новим рядком у Vim?.
\r
замість \n
.Заміна на \n
вставляє в текст нульовий символ. Щоб отримати новий рядок, використовуйте \r
. Однак при пошуку нового рядка ви все одно будете використовувати \n
. Така асиметрія пов'язана з тим, що \n
і \r
роблять дещо різні речі:
\n
відповідає кінцю рядка (переходу на новий рядок), тоді як \r
відповідає поверненню каретки. З іншого боку, у підстановках \n
вставляє нульовий символ, а \r
вставляє новий рядок (точніше, сприймається як введення xxd
показує hexdump отриманого файлу.
echo bar > test
(echo 'Before:'; xxd test) > output.txt
vim test '+s/b/\n/' '+s/a/\r/' +wq
(echo 'After:'; xxd test) >> output.txt
more output.txt
Before:
0000000: 6261 720a bar.
After:
0000000: 000a 720a ..r.
Іншими словами, \n
вставив у текст байт 0x00; \r
вставив байт 0x0a.
Вам потрібно використовувати
:%s/,/^M/g
Щоб отримати символ ^M
, натисніть Ctrl v, а потім Enter
\r
може зробити цю роботу за вас.