gVim, показывающий возврат каретки (^M), даже если файловый режим явно DOS
-
18-09-2019 - |
Вопрос
Я использую gVim в Windows.Мой код показывает ^M
символы в конце строк.Я использовал :set ff=dos
безрезультатно.В ^M
символы остаются для существующих строк, но не отображаются для новых строк, которые я ввожу.Я переключил режимы на mac (показывает ^J
символы) и unix (также показывает ^M
символы) и вернуться к dos.Кто-нибудь еще видел это?
Решение
Это происходит, когда у вас есть смесь окончаний строк Windows и Unix.Если у вас 100 строк, 99 из которых - \ n, а одна - , вы увидите 99 ^ M символов.Исправление состоит в том, чтобы найти эту единственную строку и заменить ее.Или запустите dos2unix для этого файла.Вы можете заменить окончания строк Windows на:
:%s/\r\(\n\)/\1/g
Другие советы
Обычно я использую следующее для очистки окончаний моих строк:
:g/^M$/s///
Чтобы получить ctrl-M, я обычно набираю ctrl-Q, затем ctrl-M, и он вставляет его.(В некоторых средах это может быть ctrl-V, затем ctrl-M.) Я не знаю почему, но я нахожу, что это легче запомнить, чем rq's.
Не забудьте сделать :set ff=dos
также, или вы в конечном итоге будете сохранять окончания строк UNIX по-прежнему.
Я знаю, что на этот вопрос уже был дан ответ, но трюк, который я использую, заключается в
:%s/\r/\r/g
Это заменяет возврат каретки unix на CRLF для Windows.Просто добавлено на случай, если у кого-то еще возникнут проблемы.
Вы можете игнорировать эти символы!
поместите это в свой vimrc
совпадение Игнорировать / $/
На самом деле то, что сработало у меня (в 64-разрядной Windows, gVIM:7.2 ) был:
:set ffs=dos
не просто:ff
Запуск Vim 7.3 в Windows 7.Я использовал следующую команду:
:%s/^M/\r/g
Чтобы создать ^ M, я набрал CTRL + Q, затем CTRL + M.
Вероятно, для многих из вас это немного просто, но на всякий случай это полезно.
Основываясь на ответе richq, я обнаружил, что они полезны в моем vimrc.Обратите внимание, что второй обычно закомментирован, потому что это немного сбивает с толку dd, поскольку Vim будет ждать другого нажатия клавиши, чтобы определить, является ли это отображенной командой ex.
function! D2u() execute '%s/\r\(\n\)/\1/g' endfunction "map d2u :%s/\r\(\n\)/\1/g
Первый запускается путем ввода call D2u()
в ex и второй, нажав D2u
в режиме редактирования.
Это дополнительные окончания строк CR, обычно из-за использования файла в смешанных системах UNIX / DOS.
Возможный самый короткий ответ для удаления одного ^ M из конца каждой строки, и то, что я использую, это:
:%s/\r
что эквивалентно:
:%s/\r//
но конечные косые черты не обязательны (они предполагаются).
перепробовал много чего, но сработало следующее
:%s/\r/\r/g
примечание:использование g если вы хотите, чтобы эффект отразился на всем файле