Есть ли способ редактировать встроенные фрагменты Xcode? Существует кнопка редактирования, но нажатие на нее, похоже, не позволяет изменить текст фрагмента.
Любое понимание понимается.
Есть ли способ редактировать встроенные фрагменты Xcode? Существует кнопка редактирования, но нажатие на нее, похоже, не позволяет изменить текст фрагмента.
Любое понимание понимается.
Вы по-прежнему не можете редактировать встроенные фрагменты системы. Однако вы можете редактировать "пользовательские" фрагменты.
Самое простое решение, на мой взгляд, заключалось в том, чтобы создавать копии всех стандартных фрагментов, но изменять их так, чтобы они были "пользовательскими" фрагментами и переопределяли версии по умолчанию. Я написал небольшой Python script, чтобы выполнить эту работу. Это очень просто, и после запуска все фрагменты 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 достаточно умен, чтобы использовать добавленные файлы вместо оригинальных фрагментов. Вы можете вернуться к оригиналам в любое время, просто удалив пользовательскую версию фрагмента. Вы также можете запускать script столько раз, сколько хотите, не беспокоясь о перезаписке любых пользовательских фрагментов, сгенерированных предыдущими прогонами script.
Там есть большой маленький инструмент под названием "Редактирование фрагментов". Я просто попробовал, и очень рекомендую. По-видимому, это было приложение для оплаты, но автор теперь дает его бесплатно.
Вы можете редактировать фрагменты кода системы вручную:
.codesnippets file.plist, но некоторые строки, введенные с CR/LF, и не могут быть отредактированы стандартным редактором plist.
Вы можете редактировать фрагменты системы 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
Щелевые словарные клавиши довольно понятны и для
IDECodeSnippetIdentifier
, вы можете самостоятельно генерировать UUID, используя
например, команда:
$ uuidgen
42F6B133-5DA3-41DB-8874-4E10E447F723
После того как вы отредактировали файл, используя, например, sudo
и ваш редактор, вы
необходимо перезапустить Xcode, чтобы получить ваши изменения.
Счастливый взлом!
Либо это ошибка, либо функция. Я верю этому последнему. Вы можете добавить свои собственные фрагменты, но вы не можете редактировать встроенные. Я бы просто сделал новый фрагмент и настроил его так, как вы этого хотите.
Я написал script сегодня, который использует python и uncrustify, чтобы вытаскивать фрагменты из предоставленных Xcode, переформатировать их по своему вкусу и выгружать их в каталог, где я могу импортировать их в ~/Library/Developer/Xcode/USERDATA/CodeSnippets. Это на github здесь: Xcode4Customization