Vim:Mac vs. Linux ^M问题

3

我使用Vim和GIT在Linux/Ubuntu机器上开发项目。过去,我曾经使用Windows,这意味着行尾是DOS格式。现在转到Linux后,我总是看到行尾有令人困惑/烦恼的^M字符。有些人在这里:

如何在vim中将^M行结束符转换为“正常”行结束符?

建议我进行查找/替换或使用dos2unix等工具。这些都是很好的建议,但对于一个版本控制的项目来说,这意味着我必须为更改后的文件添加不必要的提交,并且无论如何都是一项不值得花时间的大任务。所以:

有没有办法让Vim容忍这种情况?也就是说,如果文件是DOS行结尾的,它会保持原样,并使用其格式设置新的换行符等。


2
使用Subversion,您可以设置属性svn:eol-style=native,这将自动将行结尾转换为所有平台的本地类型。我不知道Git是否具有该功能,但您可能需要首先研究一下。它很可能有。 - Keith
嗯...那是个好建议。我应该试试。我投一票! - Rafid
http://www.kernel.org/pub/software/scm/git/docs/gitattributes.html - Keith
谢谢Keith。能否将您的评论作为组织好的答案提供?这样我就可以将其标记为已接受的答案。 - Rafid
1
重写历史会导致所有提交 ID 改变(因为提交的内容改变了),所以看起来所有的历史记录现在都在另一个分支中。如果其他人有未推送的提交,他们需要将它们转移到重写后的时间线上;我已经发布了这个过程的配方。对于不太熟练的 Git 用户,你可以告诉他们必须在某一天的最后推送所有内容,然后你进行重写并推送,第二天早上他们必须重新克隆。你只需要某种方式协调,如果团队很庞大,这是不切实际的。 - Aristotle Pagaltzis
显示剩余2条评论
3个回答

2
我已经将这行代码添加到了我的 .vimrc 文件中。
set fileformats=unix,mac,dos                

如果你不知道vimrc文件是什么,它就是配置(并允许你自定义)vim的文件。默认情况下,vim会在用户的主目录中寻找名为.vimrc(注意开头的点)的文件。如果找不到它,vim将从/etc/vimrc中调用它。


这与@Joel的答案有何不同? - Rafid
每次在Vim中加载文件时,它都会自动执行。您不必为每个文件输入它。此外,它处理3种回车符(Unix、Mac和Dos...duh:P)。 - rahmu
我明白了,是的,那是个好点子。不幸的是,它似乎对我不起作用。我这样做了,但我的文件中仍然有很多^M。 - Rafid
离题(我猜)- 点击这里 --> http://sites.google.com/site/bemylifeeasy/Home/codeconvert - SergioAraujo

1

是的,您可以在vim中设置以下内容,以表明它是一个dos格式文件:

:set ff=dos

同样地:

:set ff=unix

我尝试了一下,但它不起作用。除此之外,我希望它能够根据文件格式自动执行此操作,而不是每次打开新文件都要手动执行,更不用说如果我忘记将其返回到Linux会引起的混乱了。 - Rafid

1

我找到的最佳答案是评论中@Keith的回答:

“使用Subversion,您可以设置属性svn:eol-style=native,它会自动将行结束符转换为所有平台的本地类型。我不知道Git是否具有该功能,但您可能首先要研究一下。它很可能有。”

这些链接可能会有用,其中一个是如何设置:
http://help.github.com/dealing-with-lineendings/
http://git-scm.com/docs/gitattributes


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接