2011-02-10 2 views
21

Есть ли способ редактировать встроенные фрагменты Xcode? Существует кнопка редактирования, но нажатие на нее, похоже, не позволяет изменить текст фрагмента.Xcode встроенные фрагменты редактировать

Любое понимание оценено.

+0

Xcode 4 все еще находится под NDA –

+0

Xcode 4 больше не находится под NDA. –

ответ

2

Либо это ошибка, либо ее особенность. Я считаю, что это последнее. Вы можете добавить свои собственные фрагменты, но вы не можете редактировать встроенные. Я бы просто сделал новый фрагмент и настроил его так, как вы этого хотите.

6

Вы можете редактировать систему фрагменты кода вручную:

  1. Перейти в этот каталог: "/ Developer/Library/Xcode/PrivatePlugIns".
  2. Показать пакет содержимое «IDECodeSnippetLibrary.ideplugin»
  3. Открыть «Содержание/Ресурсы/SystemCodeSnippets.codesnippets», как текстовый файл
  4. Редактировать это

.codesnippets файл является .plist, но некоторые строки вошли с CR/LF и не может быть отредактирован стандартным редактором plist.

+3

В Xcode 4.3.2 это находится в «/Applications/Xcode.app/Contents/PlugIns/IDECodeSnippetLibrary.ideplugin/Contents/Resources». – Mundi

+1

Для автономного приложения Xcode. Это точный путь к файлам по умолчанию: «/Applications/Xcode4.3.3.app/Contents/PlugIns/IDECodeSnippetLibrary.ideplugin/Contents/Resources/SystemCodeSnippets.codesnippets» – LightMan

1

Я написал сценарий сегодня, который использует python и uncrustify, чтобы вытаскивать фрагменты из предоставленных Xcode, переформатировать их по своему вкусу и выгружать их в каталог, где я могу их импортировать в ~/Library/Developer/Xcode/UserData/CodeSnippets. Он находится на github здесь: Xcode4Customization

17

Вы по-прежнему не можете редактировать встроенные фрагменты системы. Однако вы можете редактировать «пользовательские» фрагменты.

Самое простое решение, на мой взгляд, было создать копии всех стандартных фрагментов, но изменить их так, чтобы они были «пользовательскими» фрагментами и переопределяли версии по умолчанию. Я написал небольшой скрипт Python для выполнения этой задачи. Это очень просто, и после запуска все фрагменты Xcode будут редактироваться магически с помощью графического интерфейса Xcode. Нет необходимости идти отвод вокруг в 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 достаточно умен, чтобы использовать добавленные файлы вместо оригинальных фрагментов. Вы можете вернуться к оригиналам в любое время, просто удалив пользовательскую версию фрагмента. Вы также можете запускать скрипт столько раз, сколько хотите, не беспокоясь о перезаписке каких-либо пользовательских фрагментов, сгенерированных предыдущими сценариями сценария.

+0

+1 Отличное решение, спасибо! – InsertWittyName

+0

+1, но в вашем скрипте есть ошибка. Я не гуру python, но я получил ошибку при запуске вашего скрипта под терминалом. Python сообщает, что путь к файлу или каталогу (выходного plist) не найден. Я думаю, что вы забыли создать и открыть записываемый plist, прежде чем пытаться записать в него на 'plistlib.writePlist (entry, snippet_path)'. Кстати спасибо за код – anonim

+2

@ anonim.developer, спасибо за подсказку. Я попробовал это на чистой машине, и действительно была проблема. Это действительно произошло, если каталог пользовательских фрагментов еще не существовал. Plist lib автоматически создаст файл, если это необходимо, но не промежуточные каталоги. Я обновил сценарий. –

12

Есть большой инструмент, называемый «Редактирование фрагмента». Я просто попробовал, и очень рекомендую. По-видимому, это было приложение для оплаты, но автор теперь дает его бесплатно.

http://cocoaholic.com/snippet_edit/

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 

The PLIST словарь ключи довольно очевидны и для ключа IDECodeSnippetIdentifier, вы можете создать UUID, самостоятельно, используя , например, команду:

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

После того, как вы отредактировали файл, используя, например, sudo и ваш редактор выбора, вы должны перезапустить Xcode, чтобы забрать изменения.

Счастливый взлом!

Смежные вопросы