Eclipse和Windows换行符


182

当台式机崩溃时,我不得不将Eclipse工作区从Linux迁移到Windows。一周后,我愉快地将其复制回Linux,编写代码,并提交到CVS。而且,Windows换行符污染了许多文件,因此CVS diff会转储整个文件,即使我更改了一两行也是如此!

我可以编写一个脚本,但是我想知道它是否会弄乱我的Eclipse项目文件。


1
只需单击几下即可转换项目中少数/所有文件的行尾:stackoverflow.com/a/7019737/1364747
Teddy

Answers:


358

正如这里这里提到的:

将文件编码设置UTF-8为Unix,并将新文件的行尾设置为Unix,这样文本文件将以不特定于Windows操作系统的格式保存,并且最容易在异构开发人员桌面之间共享:

  • 导航到“工作区”首选项(常规:工作区)
  • 将文本文件编码更改为 UTF-8
  • 将“新文本文件行分隔符”更改为“其他”,然后从选择列表中选择“ Unix”

替代文字

  • 注意:要转换现有文件的行尾,请在Eclipse中打开文件,然后选择 File : Convert Line Delimiters to : Unix

提示:您可以通过在Package Explorer中选择,然后转到菜单项来轻松转换现有文件File : Convert Line Delimiters to : Unix


2
那正是我想要的!我已经为新文件更改了它,但是转换选项-错过了我的视线。感谢VonC!
Vasu

@Vasu:不客气:)。Outline视图和Package Explorer包含一些经常被忽略的多选元素功能。
VonC

很棒的文章。我自己通过Eclipse令人费解的迷宫式偏好对话框进行搜索,这让我发疯了。
Cerin

39
如果您在Package Explorer中选择整个项目,则可以使用该File : Convert Line Delimiters to : Unix命令一次“修复”项目中的所有文件。
Tal Weiss

11

即使更改了一行,我仍然拥有相同的,Eclipse污染的文件。解决方案:Eclipse git设置->添加条目:键:core.autocrlf值:true

在此处输入图片说明

在此处输入图片说明


尽管在大多数情况下这是一个好的解决方案,但它可能会给您带来麻烦-例如,当您计算源文件的校验和时。然后,这些将因平台而异。
zb226

8

有一个方便的bash实用程序- dos2unix是DOS / MAC到UNIX的文本文件格式转换器,如果尚未在发行版中安装,则应该可以通过软件包管理器轻松安装。 dos2unix手册页


我打算编写脚本以在Eclipse工作区上递归地执行此操作。唯一担心的是损坏了所有的Eclipse内部项目文件。感谢您的建议!
Vasu

7

除了另一个答案中提到的Eclipse解决方案和工具外,还可以考虑使用flip。它可以在普通和Windows换行符之间“翻转”任何一种方式,并且可以做一些不错的事情,例如保留文件的时间戳和其他统计信息。

您可以像这样使用它来解决您的问题:

find . -type f -not -path './.git/*' -exec flip -u {} \;

(在使用git的情况下,我放入了一个子句来忽略.git目录,但是由于flip默认情况下会忽略二进制文件,因此您可能不需要此子句。)


请注意...该命令适用于Linux用户,而不适用于Windows用户。Windows find无法以这种方式工作。
布拉德

@布拉德是正确的。但是,存在Cygwin的flip端口:github.com/jaalto/cygwin-package--flip
Michael Scheper

3

您可以尝试一下。问题是Windows在给定新行时会插入回车符和换行符。Unix系统只需插入换行符。因此,多余的回车符可能是您的日食弄糟换行符的原因。

从您的项目中获取一个或两个文件并将其转换。您可以使用Notepad ++这样做。只需打开文件,转到“格式”->“转换为Unix”(使用Windows时)。

在Linux中,只需在命令行上尝试:

sed 's/$'"/`echo \\\r`/" yourfile.java > output.java

我大约有1万个文件!因此必须以某种方式使其自动化。谢谢你的建议!
Vasu

CLI上的一些拼写错误: sed -i 's/$`echo \\\r`//' yourfile.java并使其自动化find . -name "*.java" -exec sed -i 's/$`echo \\\r`//' {} \;
pdem

3

要从\r所有子目录的CVS / *文件中递归删除回车符(),请在unix shell中运行以下命令:

find ./ -wholename "\*CVS/[RE]\*" -exec dos2unix -q -o {} \;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.