2015-08-24 3 views
2

У меня есть файл CSV. Из-за некоторых причин, когда я открываю его с vim в убунту, некоторые строки должно быть так:Соедините строки, разделенные символом^M в Vim

This is actually ^M 
a line. 

Я хочу, чтобы результат:

This is actually a line. 

Итак, я хочу, чтобы удалить все ^M и соедините те линии, разделенные ими.

ответ

0

Сначала Вы должны открыть файл с правильным lineendings:

:edit ++ff=dos 

Для предотвращения этой ошибки в будущем, поставить это в свою .vimrc:

set fileformats=unix,dos 

Соединение линий должен работать сейчас.

Если вы хотите присоединиться только линии с ^M концом, а затем забыл aboves и использовать эту команду:

:g/^M/ s/^M// | normal J 

Чтобы ввести в ^M, нажмите C-V затем Enter.

+1

: g/^ M/s/^ M // | нормальный J применяется ко всему файлу? Я использую его, и он просто применяет некоторые строки. И тогда я должен ввести его снова. –

+0

Я могу помочь больше, если вы могли бы привести пример из (оригинального) файла, где команда не работает. Вы можете загрузить его, например, на https://gist.github.com/ – bimlas

1

The^M - это возврат каретки, вероятно, этот файл был создан в Windows. Вы можете просто позвонить dos2unix filename.csv

В Vim можно сделать :%s/^M//g (нажмите ^ следуют M, удерживая Ctrl, чтобы получить ^M).

2

Это могут быть многострочные ячейки, сохраненные в Excel. Кажется, что у вас есть пары возврата каретки/возврата линии, так как у вас есть^M (возврат каретки), за которым следует разрыв строки.

В примере, который вы показываете, есть пробел до того, как^М - это всегда так?

Чтобы удалить все пары возврата каретки/Linefeed вы можете использовать:

:%s/\r\n//g 

(\ г есть последовательность выхода для возврата каретки, а \ п является последовательностью символов для перевода строки или символа новой строки)

Или заменить их пробелами:

:%s/\r\n/ /g 
Смежные вопросы