【问题标题】:Eclipse and Windows newlinesEclipse 和 Windows 换行符
【发布时间】:2010-12-25 13:32:31
【问题描述】:

当我的桌面崩溃时,我不得不将我的 Eclipse 工作区从 Linux 移动到 Windows。一周后,我将它复制回 Linux,愉快地编写代码,提交到 CVS。唉,windows 换行已经污染了很多文件,所以 CVS diff 会转储整个文件,即使我更改了一两行!

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

【问题讨论】:

标签: eclipse newline delimiter


【解决方案1】:

如提到的herehere

将文件编码设置为 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 用户。 Windows find 不能以这种方式工作。
  • @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 {} \;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-17
    • 2011-06-21
    • 2017-08-22
    • 1970-01-01
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    • 2015-06-04
    相关资源
    最近更新 更多