我今天更新到Xcode 4,我的自定义文本宏不再有效。我找不到有关如何在Xcode 4中使用自定义宏的任何信息。这仍然有可能吗?请让我知道是否有人提出了解决方案。如何在Xcode 4中创建自定义文本宏?
这是我目前有我的'ObjectiveC.xctxtmacro'文件的目录。 〜/库/应用程序支持/开发人员/共享/ Xcode /规格
我今天更新到Xcode 4,我的自定义文本宏不再有效。我找不到有关如何在Xcode 4中使用自定义宏的任何信息。这仍然有可能吗?请让我知道是否有人提出了解决方案。如何在Xcode 4中创建自定义文本宏?
这是我目前有我的'ObjectiveC.xctxtmacro'文件的目录。 〜/库/应用程序支持/开发人员/共享/ Xcode /规格
定义文本宏的方式以及它们的居住位置已更改的格式 - 文本宏已变形为代码片段。
你可以做的是制作一个新的代码片段(带任何东西,只需拖动文本到代码片段窗口中),然后去寻找代码片段(宏)的当前格式,并将你当前的宏迁移到那里。
目录到哪里去是:
~/Library/Developer/XCode/UserData/CodeSnippets
在那里你会看到文件与名称类似:
E4B300B5-E0EA-4E46-9963-6E9B2111E578.codesnippet
伟大的事情是,你不必使用UUID名 - 我能够将其中一个复制到名为“MyTest.codesnippet”的文件中,XCode仍然读取它。
因此,每个现有宏都有一个文件(因为旧的.xctxtmacro文件中通常有许多宏),所以可以使用实际的宏文本,因为参数语法没有改变(尽管宏观上的所有元数据都发生了很大变化)。您必须将定义的任何参数的“<”/“>”部分转换为XML安全语法<
/>
,因为这些文件现在是XML plists。举个例子,一个简单的宏产生NSLog(@"Hello Nurse: %@",
东西的内容);
当“护士”键入:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDECodeSnippetCompletionPrefix</key>
<string>nurse</string>
<key>IDECodeSnippetCompletionScopes</key>
<array>
<string>All</string>
</array>
<key>IDECodeSnippetContents</key>
<string>NSLog(@"Hello Nurse %@", <#Thing#>);
</string>
<key>IDECodeSnippetIdentifier</key>
<string>E4B300B5-E0EA-4E46-9963-6E9B2111E579</string>
<key>IDECodeSnippetLanguage</key>
<string>Xcode.SourceCodeLanguage.Objective-C</string>
<key>IDECodeSnippetTitle</key>
<string>TestNurse</string>
<key>IDECodeSnippetUserSnippet</key>
<true/>
<key>IDECodeSnippetVersion</key>
<integer>2</integer>
</dict>
</plist>
注意,代码段是从文本宏缺少的一个方面,就是你用于能够在激活文本宏时定义参数(在#
之后添加!
,如<#!ReplaceParam!#>
) - 在代码片段系统中,似乎没有将代码片段应用于选定文本的方法,你只能将它拖出来作为新的。参数仍然作为正常参数。
非常感谢您的深入解答。我非常依赖自定义文本宏,这让我非常吃惊。如果你知道我总是在日志中包含'Hello Nurse',那真是太奇怪了。 ;) – Christine 2011-03-14 23:31:06
以某种方式,新系统更好一些。现在更多的人可以创建代码片段,因为他们不需要在某处创建目录和文件。此外,完成效果更好,您以前必须键入完成并用Ctrl-手动强制识别。 ,但是现在你只需输入一点完成并打回去即可。 – 2011-03-15 01:45:49
不确定这是否是您的意思,但您可以使用<#paramName#>来定义参数。 – 2011-06-26 04:33:52