Xcode内置代码段编辑
有没有办法编辑Xcode的内置代码段?有一个编辑按钮,但按下它似乎不允许更改代码段的文本Xcode内置代码段编辑,xcode,code-snippets,Xcode,Code Snippets,有没有办法编辑Xcode的内置代码段?有一个编辑按钮,但按下它似乎不允许更改代码段的文本 任何洞察都将不胜感激。这要么是一个bug,要么是一个特性。我相信是后者。您可以添加自己的代码段,但不能编辑内置代码段。我只需要制作一个新的代码片段,并根据您的需要进行自定义 您可以手动编辑系统代码段: 转到以下目录:“/Developer/Library/Xcode/PrivatePlugIns” 显示“IDECodeSnippetLibrary.ideplugin”的包内容 以文本文件形式打开“Conte
任何洞察都将不胜感激。这要么是一个bug,要么是一个特性。我相信是后者。您可以添加自己的代码段,但不能编辑内置代码段。我只需要制作一个新的代码片段,并根据您的需要进行自定义 您可以手动编辑系统代码段:
.codesnippets文件是一个.plist文件,但有些字符串是用CR/LF输入的,不能由标准plist编辑器编辑。我今天写了一个脚本,它使用python和uncrustify从Xcode提供的代码中提取代码片段,并根据自己的喜好重新格式化,然后将它们转储到一个目录中,在那里我可以将它们导入~/Library/Developer/Xcode/UserData/codesippets。它位于github上:您仍然无法编辑内置的系统代码段。但是,您可以编辑“用户”代码段 在我看来,最简单的解决方案是创建所有默认代码段的副本,但修改它们,使它们成为“用户”代码段,并覆盖默认版本。我编写了一个小Python脚本来完成这项工作。它非常简单,运行它之后,所有Xcode的代码片段都可以通过Xcode GUI神奇地编辑。无需手动在plist中四处捣乱:
import plistlib
import os.path
# Create user snippet directory if needed.
user_snippet_path = os.path.expanduser("~/Library/Developer/Xcode/UserData/CodeSnippets")
try:
os.makedirs(user_snippet_path)
except OSError, err:
if err.errno != errno.EEXIST or not os.path.isdir(user_snippet_path):
raise
# Important, you'll need to quit and restart Xcode to notice the effects.
# Important, change this if you're on a Developer Preview of Xcode.
system_snippet_path = "/Applications/Xcode.app/Contents/PlugIns/IDECodeSnippetLibrary.ideplugin/Contents/Resources/SystemCodeSnippets.codesnippets"
print("Reading snippets from " + system_snippet_path)
plist = plistlib.readPlist(system_snippet_path)
for entry in plist:
# Create a new user snippet file with modified
# contents of the original snippet. Ignore paths that
# already contain a user snippet to prevent overwriting
# previously generated snippets.
snippet_id = entry["IDECodeSnippetIdentifier"]
snippet_path = user_snippet_path + "/" + snippet_id + ".codesnippet"
if os.path.exists(snippet_path):
print(snippet_path + " already exitsts: Skipping.")
continue
print("Writing " + snippet_path)
# Marks the snippet as a user snippet. Xcode will
# crash if a user snippet and a system snippet share
# the same identifier.
entry["IDECodeSnippetUserSnippet"] = True
# Given two snippets with the same identifier,
# Xcode will only show the snippet with the higher
# "version number". This effectively hides the
# default version of the snippet.
entry["IDECodeSnippetVersion"] += 1
plistlib.writePlist(entry, snippet_path)
print("Done writing snippets.")
您会注意到,它实际上并没有更改任何Xcode的内部文件。它只是添加文件,Xcode足够聪明,可以使用添加的文件而不是原始代码段。只需删除代码段的用户版本,即可随时回滚到原始版本。您还可以根据需要多次运行脚本,而无需担心会覆盖以前运行脚本时生成的任何用户代码段。有一个很棒的小工具,名为“代码段编辑”。我刚试过,极力推荐。显然,它曾经是一个付费应用,但作者现在免费赠送了它
您可以使用文本编辑器和 系统代码段文件的位置。在Xcode 5.1.1中 系统代码段文件的位置再次更改为:
/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/SystemCodeSnippets.codesnippets
您必须具有root
权限才能在位编辑plist文件,因为它是
所有者和权限如下所示:
$ ls -l /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/SystemCodeSnippets.codesnippets
-rw-r--r-- 1 root wheel 190 May 16 18:23 /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/SystemCodeSnippets.codesnippets
plist字典键是非常不言自明的,适用于
idecodesippetidentifier
key,您可以使用
例如,命令:
$ uuidgen
42F6B133-5DA3-41DB-8874-4E10E447F723
使用例如sudo
和您选择的编辑器编辑文件后,您可以
必须重新启动Xcode才能获取更改
快乐的黑客 Xcode 4不再属于NDA。在Xcode 4.3.2中,它位于“/Applications/Xcode.app/Contents/PlugIns/IDECodeSnippetLibrary.ideplugin/Contents/Resources”中,用于Xcode的独立应用程序。这是默认代码段的确切文件路径:“/Applications/Xcode4.3.3.app/Contents/PlugIns/idecodesippetlibrary.ideplugin/Contents/Resources/systemcodesippets.codesippets”+1,但脚本中存在错误。我不是python大师,但在terminal下运行脚本时收到一个错误。Python报告未找到(输出plist的)文件或目录的路径。我想您忘记了在尝试在
plistlib.writePlist(条目,snippet\u路径)
上写入可写plist之前创建并打开它。顺便说一下,谢谢你的帮助code@anonim.developer,谢谢你的提示。我在一台干净的机器上试过,确实出了问题。实际上,如果用户的snippets目录不存在,就会发生这种情况。plist库将根据需要自动创建文件,但不会创建中间目录。我已经更新了脚本。注意:如果您已经创建了自定义代码段os。makedirs(user\u snippet\u path)
将引发异常,因为目录已经存在。此外,此脚本似乎会影响Xcode的自动缩进。运行它之后,Xcode将不再自动缩进嵌套项,例如if语句下的行或{}括号中的行。如果删除自定义代码段,脚本创建的缩进将再次工作。如果代码段路径已经存在,脚本将捕获并接受异常。你真的看到那种行为了吗?至于自动缩进,这对我来说是新的。我为Xcode 4写了这篇文章,从那以后我们有了一个主要的版本,所以事情可能已经改变了。。。