修剪Xcode中的尾随空格


Answers:


22

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

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

然后输入以下脚本:

#!/usr/bin/perl

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

9
啊,是的,很简单...谢谢。有什么办法可以将其与文件保存相关联?
亚历山大·格拉迪什

要处理整个文件(可能是您要执行的操作),请将Input设置为“整个文档”,将Output设置为“替换文档内容”。但是,这会将光标留在文件的底部。
SMBiggs 2012年

7
从Xcode 4.4开始,此答案已过时。请参阅马丁·斯托尔兹(Martin Stolz)的答案。
罗勒·布尔克

238

从Xcode 4.4开始,默认情况下将自动修剪空白,除非该行全部为空白。您也可以激活Including whitespace-only lines以解决此问题,默认情况下该功能处于禁用状态。

Xcode > Preferences > Text Editing > While editing

Xcode首选项截图


15
此设置仅在光标离开该行之后才修剪该行的尾随空白。因此,如果光标在保存时位于一行上,它仍然允许您使用一行尾随空格来保存文件。
ma11hew28

7
为什么这不是默认设置?如果您有一个带有尾随空格的现有文件,则只需标记所有内容,剪切,保存,粘贴,保存即可。
Friederbluemle 2014年

这需要覆盖此答案上的hacky脚本解决方案。
Urda

7
ctrl-i在所有现有文件上使用此+ 可以尾随空格
-Kirualex

24

我使用的是Google工具箱(适用于Mac Xcode插件),它添加了“保存时纠正空白”参数,用于修剪保存时的尾随空白。我错过了emacs的很多东西。


1
我也在使用这个插件。它按照它说的去做。
弥敦道

将会是完美的,不幸的是,目前它不适用于Xcode 4 :(
deepwell

6
现在,我们有了一些基本的Xcode 4支持。请参阅我们的新插件
dmaclach

1
在哪里可以找到“保存时纠正空白”参数?
jhasse 2012年

我终于设法使GTM在Xcode 4.3.2上运行,但是GTM Wiki上的安装说明似乎无效。不必~/Library/Application Support/Developer/Shared/Xcode/Plug-ins(按照Google的说明)将.xcplugin 放入,/Applications/Xcode.app/Contents/PlugIns而必须将其放入并重新启动Xcode。
Kristofer Sommestad

3

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

安装方式

  1. 通过自制酒桶安装:

    brew cask install swimat
  2. 直接下载该应用程序:https :
    //github.com/Jintin/Swimat/releases/download/v1.3.5/Swimat.zip

  3. 克隆extension分支并将其存档到Mac App。

用法

安装后,您可以通过来在Xcode中运行Swimat Editor -> Swimat -> Format


此工具不会删除空白行。
Mehdico

1

在Xcode 3.2中这是不可能的

编辑:

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

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

您还可以在Xcode中添加几个脚本(菜单中的用户脚本,目标中的脚本阶段,组织器中的自定义操作,甚至启动脚本的可能性极小),但是所有这些解决方案都是有缺陷的,因为它涉及到用户或用户计算机上的自定义设置。

我不知道从SCM签出项目后该解决方案就可以正常工作。我认为需要此脚本和类似的自定义脚本,因此我提交了一个错误(雷达7203835,“功能:Xcode工作流程中的更多用户脚本触发器”)。我还没有收到任何反馈。

这是雷达条目的全文:

有更多的位置在Xcode中运行脚本会很有用。

例子:

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

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

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

  4. 之前/之后的文件保存脚本。
    在保存之前检查/更改文件。例如,运行科迪美化器

  5. 自定义项目操作。
    我知道组织者定义任意动作的能力。但这是每个用户的功能(不是项目的一部分)。我想定义诸如构建或清理之类的操作,这些操作将显示在构建菜单中,并且是项目的一部分。


编辑以回答为何在这种情况下
无法解决

2
谢谢。虽然我赞成以正确的方式做到这一点,但我会接受任何不太侵入性的技巧。这些多余的空格真的很烦人。
亚历山大·格拉迪什


0

最好的简便方法,而无需使用脚本,黑客等等。只需查找和替换最好,最简单的方法,而无需使用脚本,黑客等等。只需转到“查找和替换”,然后按“ alt / option + space”,然后在替换栏中按“ space”按钮,然后单击“全部替换”。它将用普通空格替换空白,警告/错误将消失!


1
这是否仅按照问题的要求删除尾随空格?
高炉高炉
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.