|
|
||
Xcodeのテキストマクロについて、分かったことをざっくりと書きます。
(
//
// Objective-C language macros (they also show up for Objective-C++)
//
{
Identifier = objc;
Name = "Objective C";
IsMenu = YES;
// Can be set (for all languages) with the XCCodeSenseFormattingOptions user default
// DefaultSettings = {
// PreExpressionsSpacing = " ";
// InExpressionsSpacing = "";
// BlockSeparator = " ";
// PostBlockSeparator = "\n";
// };
IncludeContexts = ( "xcode.lang.objc" );
ExcludeContexts = ( "xcode.lang.string", "xcode.lang.character", "xcode.lang.comment", "xcode.lang.c.preprocessor" );
},
{
Identifier = objc.log;
BasedOn = objc;
IsMenuItem = YES;
Name = "NSLog() Call";
TextString = "NSLog$(PreFunctionArgsSpacing)($(InFunctionArgsSpacing)@\"<#message#>\"$(InFunctionArgsSpacing));";
CompletionPrefix = log;
IncludeContexts = ( "xcode.lang.objc.block" );
},
)
プロパティはKey/Value形式で定義する
/* * ここにカーソルがあると xcode.lang.commentコンテキスト */ - (void)someMessage { // ここにカーソルがあると xcode.lang.objc.blockコンテキスト }
IncludeContextsにxcode.lang.objc.blockコンテキストをもつマクロは、カーソルがメソッドのブロック内(xcode.lang.objc.blockコンテキスト)にあるときに入力補完の候補になる。( 他にもいろんなコンテキストがある。)
{
Identifier = objc.hello;
BasedOn = objc;
IsMenuItem = YES;
Name = "HelloWorld";
HelloString = "Hello,World!";
TextString = 'NSLog(@"$(HelloString)");';
CompletionPrefix = "hello";
IncludeContexts = ( "xcode.lang.objc.block" );
},
以下のようにして呼び出せます。
TextStringのプロパティに "<#! ... !#>" という文字列を挿入すると(...は任意の文字列)、プレースホルダとして展開されます。複雑なマクロを定義した時にプレースホルダを使うとよさげ
{
Identifier = objc.message;
BasedOn = objc;
IsMenuItem = YES;
Name = "Method Snippet";
CompletionPrefix = "m";
TextString = "[<#!object!#> <#!message!#>]";
},
のマクロは以下のように展開されます。