Xcode組み込みスニペット編集

code-snippets xcode
Xcode組み込みスニペット編集

Xcodeの組み込みスニペットを編集する方法はありますか? 編集ボタンはありますが、それを押してもスニペットのテキストを変更できないようです。

任意の洞察力が高く評価されています。

  22  9


ベストアンサー

組み込みのシステムスニペットはまだ編集できません。 ただし、「ユーザー」スニペットは編集できます。

私の考えで最も簡単な解決策は、すべてのデフォルトスニペットのコピーを作成することでしたが、それらを変更して「ユーザー」スニペットにし、デフォルトバージョンをオーバーライドしました。 仕事をするために、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は元のスニペットの代わりに追加されたファイルを使用するのに十分スマートです。 スニペットのユーザーバージョンを削除するだけで、いつでも元に戻すことができます。 また、スクリプトの以前の実行によって生成されたユーザースニペットを上書きすることを心配せずに、必要な回数だけスクリプトを実行できます。

18


「スニペット編集」と呼ばれる素晴らしい小さなツールがあります。 私はちょうどそれを試しました、そしてそれを強くお勧めします。 どうやら以前は有料アプリでしたが、著者は現在無料で提供しています。

12


システムコードスニペットを手動で編集できます。

  1. 「/ Developer / Library / Xcode / PrivatePlugIns」ディレクトリに移動します。

  2. 「IDECodeSnippetLibrary.ideplugin」のパッケージの内容を表示

  3. 「Contents / Resources / SystemCodeSnippets.codesnippets」をテキストファイルとして開きます

  4. それを編集する

codesnippets file is a .plist but some strings entered with CR/LF and

標準のplistエディターでは編集できません。

6


Xcodeシステムスニペットは、テキストエディターを使用して編集し、システムコードスニペットファイルの場所を知ることができます。 Xcode 5.1.1では、システムコードスニペットファイルの場所が再び次のように変更されました。

/ Applications / Xcode.app / Contents / Frameworks / IDEKit.framework / Versions / A / Resources / SystemCodeSnippets.codesnippets

また、所有者と権限は次のとおりであるため、plistファイルを編集するには「root」権限が必要です。

$ 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


今日、私はpythonとuncrustifyを使用してXcodeが提供するスニペットを引き出し、好みに合わせて再フォーマットし、それらを〜/ Library / Developer / Xcode / UserData /にインポートできるディレクトリにダンプするスクリプトを書きましたCodeSnippets。 githubにあります:https://github.com/jonmarimba/Xcode4Customization[Xcode4Customization]

1


タイトルとURLをコピーしました