在 Xcode 中修剪尾随空格

Posted

技术标签:

【中文标题】在 Xcode 中修剪尾随空格【英文标题】:Trim trailing spaces in Xcode 【发布时间】:2010-11-26 07:04:46 【问题描述】:

当我保存文件时,有没有办法强制 Xcode 修剪尾随空格?

如果重要的话,我使用的是 3.1.3 版。

【问题讨论】:

【参考方案1】:

从 Xcode 4.4 开始,默认情况下会自动修剪空格,除非该行全是空格。你也可以激活Including whitespace-only lines来解决这个问题,默认是不激活的。

转到Xcode > Preferences > Text Editing > While editing

【讨论】:

此设置仅在光标离开该行后修剪该行的尾随空格。因此,如果光标在保存时位于该行上,它仍然允许您保存带有一行尾随空格的文件。 为什么这不是默认设置?如果您有一个带有尾随空格的现有文件,只需标记所有、剪切、保存、粘贴、保存。 这需要覆盖这个答案的hacky脚本解决方案。 在所有现有文件上使用这个 + ctrl-i 可以处理尾随空格【参考方案2】:

我发现使用@MartinStolz 建议的新Automatically trim trailing whitespace -> Including whitespace-only lines 在编辑时效果很好,但我有时需要执行 Cmd + a -> Ctrl + i 并在我不编辑时多次保存文件,文件处于焦点位置。

如果您想在不使用脚本的情况下清理整个项目(不包括.md 文件),您也可以使用Find & Replace -> Regular Expression。由于这种技术也删除了文档/cmets 的尾随空格和制表符,因此您还可以尝试对列入黑名单的字符进行负前瞻以过滤掉单行 cmets。

查找所有尾随空格:

[\t ]+$

在不接触单行 cmets 的情况下查找尾随空格:

^(?!.*\\\\)[\t ]+$

替换:

<nothing>

因此,无需 swiftlint autocorrect 或类似的第三方解决方案也可以进行 linting。

【讨论】:

【参考方案3】:

最好和最简单的方法,无需使用脚本、黑客等。 只需转到Find And Replace 并按alt/option + space 并按替换栏中的space 按钮,然后单击全部替换。 它将用普通空格替换空格,警告/错误将消失!

【讨论】:

这是否只删除问题中要求的尾随个空格? 正确的想法@H2zee,只需要改用正则表达式(查看我上面的答案)。 @Blastfurnace 这取决于你,无论你想改变什么,你都可以。如果您有任何问题,请告诉我【参考方案4】:

对于 Xcode 8,我安装了 swimat Xcode 插件,用于格式化 Swift 代码,它删除了所有尾随空格和纯空格行。

安装方法

    通过自制桶安装:

    brew cask install swimat
    

    直接下载应用:https://github.com/Jintin/Swimat/releases/download/v1.3.5/Swimat.zip

    克隆 extension 分支并存档到 Mac App。

用法

安装后,您可以通过Editor -&gt; Swimat -&gt; Format 在 Xcode 中运行 Swimat。

【讨论】:

这个工具不会删除空行。 @Sabrina 这个答案是关于删除尾随空格,而不是空行。【参考方案5】:

在此处查看 Xcode4:http://www.wezm.net/technical/2011/08/strip-trailing-whitespace-xcode-4/

很酷,Mac 版 Google 工具箱现在为 Xcode4 添加了“修剪空白”选项。

http://code.google.com/p/google-toolbox-for-mac/downloads/list

谢谢你,谷歌!

【讨论】:

【参考方案6】:

我正在使用Google Toolbox For Mac Xcode Plugin,它添加了一个“保存时正确空格”参数,用于在保存时修剪尾随空格。我很怀念emacs。

【讨论】:

我也在使用这个插件。言行一致。 会很完美,不幸的是它目前不适用于 Xcode 4 :( 我们现在有了一些基本的 Xcode 4 支持。请参阅我们的new plugin 在哪里可以找到“保存时正确的空白”参数? 我终于设法让 GTM 在 Xcode 4.3.2 上运行,但来自 GTM wiki 的安装说明似乎无效。我没有将 .xcplugin 放入 ~/Library/Application Support/Developer/Shared/Xcode/Plug-ins(按照 Google 的说明),而是将其放入 /Applications/Xcode.app/Contents/PlugIns 并重新启动 Xcode。【参考方案7】:

这在 Xcode 3.2 中是不可能的

编辑:

我回答这个问题很简短,因为没有办法正确地做到这一点

当然,由于它是软件,您可以做任何事情:从 Input Manager hack 或其他代码注入方式到系统范围的键盘拦截,您可以随时更改本地系统来做任何事情。您可以设置 Applescript 文件夹操作 (arrgh) 或使用启动恶魔和 FSEvents 工具来查看您的源代码文件。

您还可以向 Xcode 添加几个脚本(菜单中的用户脚本,目标中的脚本阶段,管理器中的自定义操作,甚至还有一个非常未知的启动脚本),但是所有这些解决方案都有缺陷,因为它涉及用户或用户机器上的自定义设置。

我不知道在从 SCM 签出项目后简单有​​效的解决方案。我相信需要这个和类似的自定义脚本,所以我提交了一个错误(雷达 7203835,“功能:Xcode 工作流程中的更多用户脚本触发器”)。我还没有收到任何反馈。

这是雷达条目的全文:

在 Xcode 中拥有更多运行脚本的地方会很有用。

例子:

    预构建脚本 预构建脚本可用于构建先决条件,如 *.xcconfig 文件或 config.h 标头。这对于“运行脚本构建阶段”是不可能的,因为依赖项跟踪发生在任何构建阶段被触发之前。

    后期构建脚本 与上面类似,但在构建之后运行 完成(包括代码签名等)。 用于附加包装, 有效性检查等

    SCM 提交前/后提交脚本。 检查项目完整性。

    前/后文件保存脚本。 在保存之前检查/更改文件。例如。运行 cody 美化器

    自定义项目操作。 我知道组织者定义任意行为的能力。但这是每个用户的功能(不是项目的一部分)。我想定义显示在构建菜单中并且是项目一部分的构建或清理等操作。

【讨论】:

编辑回答为什么在这种情况下变通办法不令人满意 谢谢。虽然我赞成以正确的方式做这件事,但我会接受任何不太侵入性的黑客攻击。那些多余的空格真的很烦人。【参考方案8】:

您可以创建脚本并将其绑定到键盘快捷键:

选择 脚本菜单 > 编辑用户脚本... 按 + 按钮并选择 新建 Shell 脚本 给它起一个像“Strip Trailing Spaces”这样的名字,给它一个像⌃⇧R这样的快捷方式。 将输入设置为“选择”,将输出设置为“替换选择”

然后输入以下脚本:

#!/usr/bin/perl

while (<>) 
    s/\s+$//;
    print "$_\n";

【讨论】:

啊,是的,很简单...谢谢。有没有办法将此与文件保存相关联? 要处理整个文件(这可能是您想要做的),请将输入设置为“整个文档”并将输出设置为“替换文档内容”。但是,这会将光标留在文件底部。 这个答案在 Xcode 4.4 中已经过时了。请参阅 Martin Stolz 的答案。

以上是关于在 Xcode 中修剪尾随空格的主要内容,如果未能解决你的问题,请参考以下文章

如何以标准方式修剪前导/尾随空格?

可以将 Jackson 配置为从所有字符串属性中修剪前导/尾随空格吗?

修剪或删除元素内的前导/尾随空格[重复]

修剪前导和尾随空格

使用jQuery从textarea修剪前导/尾随空格?

在 IntelliJ IDEA 12 中保存时删除尾随空格