7

Обратите внимание на окончания строк из git diff:

-   IP_ADDR: 'http://1.2.3.4:143'
+   IP_ADDR: 'http://2.4.6.8:143'^M

Я отредактировал этот файл, установив курсор на 1 затем нажав ct: и затем введя новый IP-адрес. Полные строки не были добавлены или удалены из файла. Однако я заметил, что файл отображается как dos типа DOS.

Зачем VIM изменять окончание строки, если я не редактировал эту часть документа явно? Кроме того, видя, как diff показывает, что в исходной строке не было ^M , как еще VIM мог бы решить, что это файл dos ?

2 ответа2

6

Vim обнаружит исходный формат файла (среди настроенных в 'fileformats') и запишет с тем же. Единственный способ переключения Vim (например, с Unix на стиль Windows) - через явный :setlocal fileformat=dos . Вряд ли у вас это есть в вашей конфигурации; :verbose setl ff? мог бы сказать вам.

Я бы не слишком беспокоился о Git diff (если не все строки выглядят как измененные, тогда у вас действительно есть переключение концов строк), а скорее о том, что то, что фиксируется, в порядке.

Обратите внимание, что при установке Git autocrlf = true Git будет преобразовывать переводы строки в стандарт системы при извлечении файлов и в переводы строк LF при фиксации. Так что все может быть хорошо, только вывод Git diff сбивает вас с толку.

4

Это доказательство того, что мы все живем в Матрице. Если бы это был действительно 21-й век, то мы бы не боролись с разными окончаниями.

Vim проделывает довольно хорошую работу, выполняя The Right Thing с окончаниями строк. Подробности объясняются в :help 'ffs' . Конечно, vim не может прочитать ваши мысли: если ваш файл имеет несовместимые окончания строк, тогда vim может делать не то, что вы хотите.

Я предлагаю открыть файл в Vim, а затем

:e! ++ff=unix

Это перезагрузит файл с диска, заставив vim использовать окончания строки в стиле Unix. Затем вы должны точно увидеть, какие строки имеют CRLF-окончания, потому что они заканчиваются необработанными символами ^M

Хотя я люблю git, я не знаю и доверяю ему так же, как и vim. Я думаю, что некоторые люди рекомендуют "установить и забыть" конфигурации для настроек git crlf , которые могут привести к путанице. Я предпочитаю избегать настройки, упомянутой @Ingo Karkat в своем ответе. Я хочу, чтобы git проверил тот же файл, который был зарегистрирован, и позволил мне (и vim) позаботиться об окончаниях строк.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .