Xcode内置片段编辑

时间:2011-02-10 21:38:57

标签: xcode code-snippets

有没有办法编辑Xcode的内置代码段?有一个编辑按钮,但按下它似乎不允许更改片段的文本。

感谢任何见解。

6 个答案:

答案 0 :(得分:18)

您仍然无法编辑内置系统片段。但是,您可以编辑“用户”代码段。

我认为最简单的解决方案是创建所有默认代码段的副本,但修改它们以便它们是“用户”代码段并覆盖默认版本。我写了一个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足够智能,可以使用添加的文件而不是原始代码段。只需删除代码段的用户版本,即可随时回滚到原始文件。您也可以根据需要多次运行脚本,而不必担心覆盖以前运行的脚本生成的任何用户片段。

答案 1 :(得分:12)

有一个名为“Snippet Edit”的小工具。我刚尝试过,强烈推荐它。显然它曾经是一个付费应用程序,但作者现在免费赠送它。

http://cocoaholic.com/snippet_edit/

答案 2 :(得分:6)

您可以手动编辑系统代码段:

  1. 转到此目录:“/ Developer / Library / Xcode / PrivatePlugIns”。
  2. 显示“IDECodeSnippetLibrary.ideplugin”
  3. 的包装内容
  4. 将“Contents / Resources / SystemCodeSnippets.codesnippets”打开为文本文件
  5. 编辑
  6. .codesnippets文件是一个.plist,但是一些字符串是用CR / LF输入的,不能由标准的plist编辑器编辑。

答案 3 :(得分:4)

您可以使用文本编辑器编辑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字典键非常不言自明 IDECodeSnippetIdentifier密钥,您可以自己使用生成UUID 例如命令:

$ uuidgen
42F6B133-5DA3-41DB-8874-4E10E447F723

使用例如sudo和您选择的编辑器编辑文件后,您就可以了 必须重新启动Xcode才能获取更改。

快乐的黑客攻击!

答案 4 :(得分:2)

这是一个错误,或者它是一个功能。我相信这是后者。您可以添加自己的代码段,但无法编辑内置代码段。我只是制作一个新的片段并根据您的需要进行自定义。

答案 5 :(得分:1)

我今天编写了一个脚本,使用python和uncrustify从Xcode提供的那些片段中删除它们,重新格式化它们,并将它们转储到一个目录中,然后我可以将它们导入〜/ Library / Developer / Xcode /的UserData / CodeSnippets。它在github上:Xcode4Customization