Edited at

Xcode4のコード入力補間の追加

More than 5 years have passed since last update.

前はTextMacrosで編集出来たんですが使えなくなってて、

あるはずだよなーと思って調べてみたら、

変わりにコードスニペットになってたみたい。

やり方を忘れないように、メモメモ

(不明なとこもあるけどとりあえず出来たかなと。

※Xcode4.6.1で試した結果になります。

(追記

XcodeでUtilitis(ソースの右側に出てくるエリア)の下部の{}マークからも設定可能。

コードのドラッグアンドドロップと選択だけで、

以下のディレクトリに自動で作成してくれちゃう・・・^^;

sawat1203さん、教えてくれてありがとうございます!


手順

1、~/Library/Developer/Xcode/UserData/CodeSnippetsに移動

(CodeSnippetsが無い場合は作成)

2、/Applications/Xcode.app/Contents/PlugIns/IDECodeSnippetLibrary.ideplugin/Contents/Resources/SystemCodeSnippets.codesnippets

ここにあるファイルを参考に編集

(デフォルトで設定されているコードスニペットの設定ファイル)

3、1で移動しておいたディレクトリにcodesnippet拡張子で一個づつスニペット設定ファイルを作成

(デフォルトの設定ファイルの様に、codesnippets拡張子にしても複数設定が出来なかった・・・arrayを入れても認識してくれない・・・)

4、codesnippetファイルの要素内に各設定を記載

 ※IDECodeSnippetUserSnippet:【重要】このキーを追加

 (デフォルトのファイルにはないが、ユーザー定義の値という宣言っぽい)

 ・IDECodeSnippetVersion:バージョン?自動で更新されてる??? 

・IDECodeSnippetCompletionPrefix:キーになる文字列

 ・IDECodeSnippetContents:キーを置換する文字列

 ・IDECodeSnippetIdentifier:他のIDと被らなければ、どんな文字列でも問題無さそう

 ・IDECodeSnippetLanguage:使用言語(Objctive-C、C++等)

 ・IDECodeSnippetCompletionScopes:表示される場所(複数可)

  -TopLevel:クラス外

  -ClassImplementation:クラス内、メソッド外

  -CodeBlock:メソッド内

  -All:全て?

 (システムに設定されてるスニペットを見た感じなので、たぶん^^;

 ・IDECodeSnippetRelativePriority:プライオリティって書いてるので優先順位?

5、一度Xcodeを終了させて反映



サンプル


NSNumberTRUE.codesnippet

<?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>@true</string>
<key>IDECodeSnippetCompletionScopes</key>
<array>
<string>All</string>
</array>
<key>IDECodeSnippetContents</key>
<string>@TRUE</string>
<key>IDECodeSnippetIdentifier</key>
<string>NSNumberTRUE</string>
<key>IDECodeSnippetLanguage</key>
<string>Xcode.SourceCodeLanguage.Objective-C</string>
<key>IDECodeSnippetSummary</key>
<string>NSNumber BOOL type TRUE value.</string>
<key>IDECodeSnippetTitle</key>
<string>NSNumber TRUE</string>
<key>IDECodeSnippetUserSnippet</key>
<true/>
<key>IDECodeSnippetVersion</key>
<integer>2</integer>
</dict>
</plist>


NSNumberのBOOL値にコード補間が効かなかったので、@TRUEを補間してくれるスニペットです^^;

参考:

http://stackoverflow.com/questions/5303374/how-do-i-create-custom-text-macros-in-xcode-4