Eclipse 和 Windows 换行符
Posted
技术标签:
【中文标题】Eclipse 和 Windows 换行符【英文标题】:Eclipse and Windows newlines 【发布时间】:2010-12-25 13:32:31 【问题描述】:当我的桌面崩溃时,我不得不将我的 Eclipse 工作区从 Linux 移动到 Windows。一周后,我将它复制回 Linux,愉快地编写代码,提交到 CVS。唉,windows 换行已经污染了很多文件,所以 CVS diff 会转储整个文件,即使我更改了一两行!
我可以编写一个脚本,但我想知道它是否会弄乱我的 Eclipse 项目文件。
【问题讨论】:
只需点击几下即可转换项目中少数/所有文件的行尾:***.com/a/7019737/1364747 【参考方案1】:如提到的here 和here:
将文件编码设置为
导航到工作区首选项(常规:工作区) 将文本文件编码更改为UTF-8
并将新文件的行尾设置为 Unix,以便文本文件以不特定于 Windows 操作系统的格式保存,并且最容易在异构开发人员桌面之间共享:UTF-8
将新文本文件行分隔符更改为其他并从选择列表中选择 Unix
注意:要转换现有文件的行尾,请在 Eclipse 中打开文件并选择File : Convert Line Delimiters to : Unix
提示:您可以轻松地转换现有文件,方法是在 Package Explorer 中选择 然后,然后转到菜单项 File : Convert Line Delimiters to : Unix
【讨论】:
这正是我想要的!我已经为新文件更改了它,但是转换选项 - 错过了我的眼睛。谢谢 VonC! @Vasu:不客气:)。 Outline 视图和 Package Explorer 包含一些经常被忽略的多选元素的功能。 好文章。通过 Eclipse 可怕的迷宫般的偏好对话框搜索这个让我发疯了。 如果您在包资源管理器中选择整个项目,您可以使用File : Convert Line Delimiters to : Unix
命令一次“修复”项目中的所有文件。【参考方案2】:
即使更改了一行,我也有相同的 eclipse 污染文件。 解决方案:Eclipse git设置->添加条目: 键:core.autocrlf 值:真
【讨论】:
虽然在大多数情况下这是一个不错的解决方案,但它可能会咬你一口——例如,当你计算源文件的校验和时。然后这些将因平台而异。【参考方案3】:有一个方便的 bash 实用程序 - dos2unix
- 这是一个 DOS/MAC 到 UNIX 文本文件格式转换器,如果尚未安装在您的发行版上,应该可以通过包管理器轻松安装。 dos2unix man page
【讨论】:
我正计划编写一个脚本以递归方式在我的 Eclipse 工作区上执行此操作。唯一担心的是损坏任何 Eclipse 内部项目文件。感谢您的建议!【参考方案4】:除了another answer 中提到的Eclipse 解决方案和工具之外,还可以考虑flip。它可以在普通换行符和 Windows 换行符之间“翻转”,并且可以做一些不错的事情,例如保留文件的时间戳和其他统计信息。
你可以这样用它来解决你的问题:
find . -type f -not -path './.git/*' -exec flip -u \;
(我添加了一个子句来忽略你的 .git 目录,以防你使用 git,但由于 Flip 默认忽略二进制文件,你可能不需要这个。)
【讨论】:
请注意...此命令适用于 Linux 用户,而非 Windows 用户。 Windowsfind
不能以这种方式工作。
@Brad 是正确的。但是,存在一个 Cygwin 翻转端口:github.com/jaalto/cygwin-package--flip【参考方案5】:
你可以试一试。问题是 Windows 在给定新行时会插入回车符和换行符。 Unix 系统只插入一个换行符。因此,额外的回车字符可能是您的 Eclipse 与换行符混淆的原因。
从您的项目中获取一两个文件并进行转换。您可以使用 Notepad++ 来执行此操作。只需打开文件,转到 Format->Convert to Unix (当你使用 windows 时)。
在 Linux 中,只需在命令行上尝试:
sed 's/$'"/`echo \\\r`/" yourfile.java > output.java
【讨论】:
我有大约 10k 个文件!所以不得不以某种方式自动化它。感谢您的建议! 您的 CLI 上的一些拼写错误:sed -i 's/$`echo \\\r`//' yourfile.java
并使其自动化find . -name "*.java" -exec sed -i 's/$`echo \\\r`//' \;
【参考方案6】:
要从所有子目录中的 CVS/* 文件中递归删除回车符 (\r
),请在 unix shell 中运行以下命令:
find ./ -wholename "\*CVS/[RE]\*" -exec dos2unix -q -o \;
【讨论】:
以上是关于Eclipse 和 Windows 换行符的主要内容,如果未能解决你的问题,请参考以下文章