Как мне создать пользовательские текстовые макросы в Xcode 4? - PullRequest
5 голосов
/ 14 марта 2011

Сегодня я обновился до Xcode 4, и мои пользовательские текстовые макросы больше не работают.Я не могу найти никакой информации о том, как использовать пользовательские макросы с Xcode 4. Это все еще возможно?Пожалуйста, дайте мне знать, если кто-нибудь придумал решение.

Это каталог, в котором у меня сейчас находится файл ObjectiveC.xctxtmacro.~ / Библиотека / Поддержка приложений / Разработчик / Shared / Xcode / Характеристики

1 Ответ

11 голосов
/ 14 марта 2011

Формат определения текстовых макросов и места их изменения изменился - текстовые макросы превратились в фрагменты кода.

Что вы можете сделать, это создать новый фрагмент кода (с чем угодно, просто перетащите текств окно «Фрагмент кода»), затем найдите текущий формат фрагмента (макроса) и перенесите туда текущие макросы.

Каталог, куда они идут:

~/Library/Developer/XCode/UserData/CodeSnippets

Там вы увидите файлы с такими именами, как:

E4B300B5-E0EA-4E46-9963-6E9B2111E578.codesnippet

Самое замечательное, что вам не нужно использовать имена UUID - я смог скопировать одно из них в файл с именем "MyTest".codesnippet "и XCode все еще читает его.

Таким образом, у вас будет один файл для каждого существующего макроса (так как в старых файлах .xctxtmacro обычно есть несколько макросов), вы можете использовать сам текст макроса как- поскольку синтаксис параметров не изменился (хотя все метаданные вокруг макроса существенно изменились).Вам придется преобразовать части "<" / "> любых параметров, определенных в XML-безопасный синтаксис &lt; / &gt;, поскольку файлы теперь являются списками XML.Например, содержимое простого макроса, который выдает NSLog(@"Hello Nurse: %@", Thing );, когда набирается «няня»:

<?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>nurse</string>
    <key>IDECodeSnippetCompletionScopes</key>
    <array>
        <string>All</string>
    </array>
    <key>IDECodeSnippetContents</key>
    <string>NSLog(@"Hello Nurse %@", &lt;#Thing#&gt;);
</string>
    <key>IDECodeSnippetIdentifier</key>
    <string>E4B300B5-E0EA-4E46-9963-6E9B2111E579</string>
    <key>IDECodeSnippetLanguage</key>
    <string>Xcode.SourceCodeLanguage.Objective-C</string>
    <key>IDECodeSnippetTitle</key>
    <string>TestNurse</string>
    <key>IDECodeSnippetUserSnippet</key>
    <true/>
    <key>IDECodeSnippetVersion</key>
    <integer>2</integer>
</dict>
</plist>

Обратите внимание, что один аспект фрагментов кода, которыйотсутствует в текстовых макросах, это означает, что вы имели возможность определять параметры, куда будет идти выбранный текст, когда вы активировали текстовый макрос (добавляя ! после #, как в <#!ReplaceParam!#>) - в системе Code Snippet,не существует способа применить фрагмент кода к выделенному тексту, вы можете только перетащить его как новый.Параметры все еще работают как нормальные параметры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...