Я искал все выше и ниже всех, кто задавал подобные вопросы. не кажется простым случаем :set fileformat=dos
или :set fileformat=unix
.
Запись файла с :set fileencoding=latin1
и :set fileformat=dos
, измененным так, что git diff
сообщает обо всехстроки, к которым добавляется ^ M.
Код изначально существовал счастливо:
...
if (v == value32S)
{
...
Я сделал чрезвычайно радикальное улучшение (которое прекрасно выглядит на экране в vim):
...
if (v == value32S ||
v == value33)
{
...
Но git diff
для проверки на наличие ошибочных изменений показывает:
diff --git a/csettings.cpp b/csettings.cpp
index 1234..8901 100755
--- a/csettings.cpp
+++ b/csettings.cpp
@@ -2466,7 +2466,8 @@ bool MyClass::settingIsValid(QString s)
#if CONFIG_1 || CONFIG_2
- if (v == value32S)
+ if (v == value32S ||<em><strong>^M</strong></em>
+ v == value33)<em><strong>^M</strong></em>
{
doSomething(new_v);
, где текст, выделенный жирным курсивом, является обратным видео.
Я пробовал несколько способов сделатьпо-видимому, ложная карета возвращается уходит .Сначала нужно было убедиться, что не было скрытого персонажа.Просмотр с vim
:set list
:
...
if (v == value32S ||$
v == value33)$
{$
...
Кажется хорошо.Выгрузка файла (микродетали варьируются, чтобы защитить NDA, и я слишком ленив, чтобы сделать его идеальным обманом):
$ hd csettings.cpp
(...)
0000eae0 xx xx xx xx xx xx xx xx xx 65 33 32 53 20 7c 7c |(v == value32S |||
0000eaf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 20 |.. v |
0000eb00 3d 3a 20 xx xx xx xx xx xx 65 33 33 29 0d 0a 20 |== ...value33).. |
Все других строк также заканчиваются на "0d 0a", так что это выглядит хорошо.Интересным предложением было использовать cat -e
(что было для меня новым):
$ cat -e c.cpp
...
if (v == value32S ||^M$
v == value33)^M$
{^M$
...
Другое предложение заключалось в использовании file
для подсказок:
$ file csettings.cpp
csettings.cpp: C source, UTF-8 Unicode text, with CRLF line terminators
Интересно, что этоединственный файл в этом каталоге (из заголовочных файлов и кода cpp), который не ASCII text
.Некоторые файлы имеют терминаторы строки CRLF, а некоторые нет.Кроме того, некоторые показывают C++ source
, а другие - C source
, что, я полагаю, не имеет значения.
Удаление файла и git checkout
для получения свежей копии также показывает его как UTF-8, который я проследилк наличию символа степени в некоторых строках («° F» и «° C»), поэтому UTF-8, похоже, не проблема.
Тем не менее, я не понимаю, почему с помощью vim
редактировать только эти строки может вызвать эту проблему.Или, может быть, это не проблема?Есть идеи?
----- Приложение -----
git config --get-regexp core.*
показывает
core.repositoryformatversion 0
core.filemode true
core.bare false
core.logallrefupdates true