gVim відображає повернення каретки (^ M), навіть коли режим файлу явно DOS


78

Я використовую gVim у Windows. Мій код показує ^Mсимволи в кінці рядків. Раніше я :set ff=dosбезрезультатно. Ці ^Mсимволи залишаються для існуючих ліній, але не відображаються для перенесення рядків я входжу. Я переключив режими на mac (показує ^Jсимволи) та unix (також показує ^Mсимволи) і назад на dos. Хтось ще це бачив?


Див. Vim.wikia.com/wiki/File_format для вичерпного пояснення закінчень рядків у vim / gvim. Це посилання також пояснює, як вирішити проблему.
аксіопісти

Відповіді:


139

Це трапляється, коли у вас є суміш закінчень рядків Windows та Unix. Якщо у вас 100 рядків, 99 - це \ r \ n, а один - \ n, ви побачите 99 ^ M символів. Виправлення полягає в тому, щоб знайти цей рядок і замінити його. Або запустіть dos2unix у файлі. Ви можете замінити закінчення рядків Windows такими:

:%s/\r\(\n\)/\1/g


Я знайшов цей рядок безпосередньо перед тим, як ви написали це. :) Дякую!
Джерф

1
Хе, типово. Vim чудовий, тому дотримуйтесь його! :-)
richq

2
я хотів би дати вам за це +1000
the_e

3
Зазвичай я просто б'ю їх:%s/^M//
TMN

1
Відповідь, :set ff=dosякщо ви хочете, щоб це було зроблено після закінчення, відповідь ала Евана.
Мерлін Морган-Грем


19

Зазвичай я використовую наступне для очищення закінчень рядків:

:g/^M$/s///

Щоб отримати ctrl-M, я зазвичай набираю ctrl-Q, потім ctrl-M, і він поміщає його. (У деяких середовищах це може бути ctrl-V, потім ctrl-M.) Я не знаю чому, але я вважаю, що легше запам'ятати, ніж rq .

Не забудьте це зробити, інакше :set ff=dosви в кінцевому підсумку заощадите за допомогою закінчень рядків UNIX.


Так, я зазвичай використовую версію ^ M з Ctrl-Q і все таке. Але це важче пояснити ;-) і версія групового збігу зручна для копіювання.
richq

15

Я знаю, що на це вже відповіли, але я використовую хитрість

:%s/\r/\r/g

Це замінює повернення каретки unix на вікна CRLF. Просто додав на випадок, якщо у когось виникнуть проблеми.


6

Ви можете ігнорувати ці символи!

помістіть це у ваш vimrc

збіг Ігнорувати / \ r $ /


1
Добре знати, що це є, але чи є хороший варіант використання для залишення невідповідних закінчень рядків у файлі? Здається, це просить неприємностей.
Джерф 24.03.13

1
Це більше того, що мені потрібно було (зміна файлу не завжди доцільна, коли це спричиняє значні зміни у файлі, які з’являються в деяких системах контролю версій)
RunHolt,

На жаль, це змінює закінчення рядків, як тільки ви зберігаєте файл. Отже, він створює саме ці небажані великі зміни в пробілі, лише не показуючи вас. Принаймні для мене. :(
peschü

4

Насправді у мене працювало (у 64-розрядних вікнах, gVIM: 7.2):

:set ffs=dos

не просто: ff


4

Запуск Vim 7.3 у Windows 7. Я використав таку команду:

:%s/^M/\r/g

Щоб створити ^ MI, набраний CTRL + Q, потім CTRL + M.


2

Для багатьох з вас це, мабуть, трохи просто, але випадково це корисно.

Виходячи з відповіді richq, я знайшов, що це корисно у моєму vimrc. Зверніть увагу, що другий коментується нормально, оскільки це робить dd дещо заплутаним, оскільки Vim буде чекати, поки спрацює інший штрих клавіші, якщо це команда mapped ex.

функція! D2u ()
    виконати '% s / \ r \ (\ n \) / \ 1 / g'
кінцева функція
"карта d2u:% s / \ r \ (\ n \) / \ 1 / g

Перший запускається шляхом набору тексту call D2u() в ex, а другий натисканням D2uв режимі редагування.


2

Це додаткові закінчення рядків CR, як правило, через використання файлу в змішаних системах UNIX / DOS.

Можлива найкоротша відповідь на видалення одного ^ M з кінця кожного рядка, і те, що я використовую, це:

:%s/\r

що еквівалентно:

:%s/\r//

але кінцеві скісні риски не потрібні (вони передбачаються).


1

пробував багато речей, але працювало наступне

:%s/\r/\r/g

Примітка: використовуйте g, якщо ви хочете впливати на весь файл

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.