2011-02-10 13 views
21

क्या एक्सकोड के अंतर्निर्मित स्निपेट को संपादित करने का कोई तरीका है? एक संपादन बटन है, लेकिन इसे दबाकर स्निपेट के पाठ को बदलने की अनुमति नहीं लगती है।एक्सकोड निर्मित स्निपेट्स संपादित करें

किसी भी अंतर्दृष्टि की सराहना की जाती है।

+0

एक्सकोड 4 अभी भी एनडीए –

+0

के तहत है एक्सकोड 4 अब एनडीए के तहत नहीं है। –

उत्तर

2

या तो यह एक बग है, या यह एक सुविधा है। मेरा मानना ​​है कि यह बाद वाला है। आप अपने स्वयं के स्निपेट जोड़ सकते हैं, लेकिन आप अंतर्निहित संपादित नहीं कर सकते हैं। मैं बस एक नया स्निपेट बनाउंगा और इसे अनुकूलित कर सकता हूं कि आप इसे कैसे चाहते हैं।

6

आप सिस्टम कोड के टुकड़े मैन्युअल रूप से संपादित कर सकते हैं: इस निर्देशिका में

  1. जाओ: "/ डेवलपर/Library/Xcode/PrivatePlugIns"।
  2. "IDECodeSnippetLibrary.ideplugin" के पैकेज सामग्री दिखाएँ
  3. ओपन "सामग्री/संसाधन/SystemCodeSnippets.codesnippets" पाठ फ़ाइल के रूप
  4. संपादित करें यह

.codesnippets फ़ाइल एक .plist लेकिन कुछ तार है में प्रवेश किया सीआर/एलएफ के साथ और मानक प्लेस्ट संपादक द्वारा संपादित नहीं किया जा सकता है।

+3

एक्सकोड 4.3.2 में यह "/ अनुप्रयोग /Xcode.app/Contents/PlugIns/IDECodeSnippetLibrary.ideplugin/Contents/Resources" में है। – Mundi

+1

एक्सकोड के स्वयं निहित ऐप के लिए। यह डिफ़ॉल्ट स्निपेट का सटीक फ़ाइल पथ है: "/ अनुप्रयोग /Xcode4.3.3.app/Contents/PlugIns/IDECodeSnippetLibrary.ideplugin/Contents/Resources/SystemCodeSnippets.codesnippets" – LightMan

1

मैंने आज एक स्क्रिप्ट लिखी है जो कि एक्सकोड द्वारा प्रदान किए गए स्निपेट को खींचने के लिए अजगर का उपयोग करता है और उन्हें पसंद नहीं करता है, और उन्हें एक निर्देशिका में डंप करता है जहां मैं उन्हें ~/लाइब्रेरी/डेवलपर/Xcode/UserData/CodeSnippets। यह यहां जिथब पर है: Xcode4Customization

17

आप अभी भी अंतर्निहित सिस्टम स्निपेट को संपादित नहीं कर सकते हैं। हालांकि, आप "उपयोगकर्ता" स्निपेट संपादित कर सकते हैं।

मेरे दिमाग में सबसे आसान समाधान सभी डिफ़ॉल्ट स्निपेट की प्रतियां बनाना था, लेकिन उन्हें संशोधित करना ताकि वे "उपयोगकर्ता" स्निपेट हैं और डिफ़ॉल्ट संस्करण ओवरराइड कर सकें। मैंने नौकरी करने के लिए एक छोटी पायथन लिपि लिखी। यह बहुत आसान है, और इसे चलाने के बाद एक्सकोड जीयूआई के माध्यम से सभी एक्सकोड के स्निपेट जादुई रूप से संपादन योग्य होंगे। हाथ से plist में चारों ओर mucking जाने की जरूरत:

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 के आंतरिक फ़ाइलों के किसी भी नहीं बदलता है। यह सिर्फ फाइलें जोड़ता है, और एक्सकोड मूल स्निपेट की बजाय अतिरिक्त फ़ाइलों का उपयोग करने के लिए पर्याप्त स्मार्ट है। स्निपेट के उपयोगकर्ता संस्करण को हटाकर आप किसी भी समय मूल पर वापस रोल कर सकते हैं। स्क्रिप्ट के पिछले रनों द्वारा उत्पन्न किसी भी उपयोगकर्ता स्निपेट को ओवरराइट करने के बारे में चिंता किए बिना आप जितनी बार चाहें स्क्रिप्ट को भी चला सकते हैं।

+0

+1 ग्रेट समाधान, धन्यवाद! – InsertWittyName

+0

+1, लेकिन आपकी स्क्रिप्ट में एक बग है। मैं एक अजगर गुरु नहीं हूं लेकिन मुझे एक त्रुटि मिली क्योंकि मैं टर्मिनल के तहत अपनी स्क्रिप्ट चलाता हूं। पायथन रिपोर्ट करता है कि फ़ाइल या निर्देशिका (आउटपुट प्लास्ट के) के लिए पथ नहीं मिला। मुझे लगता है कि आप 'plistlib.writePlist (एंट्री, स्निपेट_पैथ)' पर लिखने से पहले लेखन योग्य प्लिस्ट बनाने और खोलने के लिए भूल गए हैं। वैसे आपके कोड – anonim

+2

@ anonim.developer के लिए धन्यवाद, टिप के लिए धन्यवाद। मैंने इसे एक साफ मशीन पर करने की कोशिश की और वास्तव में एक समस्या थी। यह वास्तव में तब हुआ जब उपयोगकर्ता की स्निपेट निर्देशिका पहले से मौजूद नहीं थी। यदि आवश्यक हो तो प्लिस्ट lib स्वचालित रूप से फ़ाइल बना देगा, लेकिन इंटरमीडिएट निर्देशिका नहीं। मैंने स्क्रिप्ट को अपडेट किया है। –

12

"स्निपेट एडिट" नामक एक बहुत छोटा टूल है। मैंने अभी कोशिश की, और अत्यधिक अनुशंसा की। जाहिर है, यह एक पे-पे ऐप होता था, लेकिन लेखक अब इसे मुफ्त में दे रहा है।

http://cocoaholic.com/snippet_edit/

4

आप एक पाठ संपादक का उपयोग और सिस्टम कोड के स्थान फ़ाइल टुकड़े जानने Xcode प्रणाली के टुकड़े संपादित कर सकते हैं। एक्सकोड 5.1 में।1 प्रणाली कोड के टुकड़े फ़ाइल के स्थान पर एक बार फिर से बदल गया है:

/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/SystemCodeSnippets.codesnippets

और आप जगह में plist फ़ाइल को संपादित करने root विशेषाधिकार इस प्रकार होनी चाहिए, क्योंकि इसके मालिक और अनुमतियाँ हैं:

$ 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 

plist शब्दकोश कुंजी सुंदर स्वतः स्पष्ट हैं और IDECodeSnippetIdentifier कुंजी के लिए, आप अपने आप को UUIDs उदाहरण के लिए आदेश का उपयोग उत्पन्न कर सकते हैं:

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

एक बार जब आप उदाहरण sudo और अपनी पसंद के संपादक के लिए उपयोग कर फ़ाइल संपादित कर लिया है, आप अपने परिवर्तनों को लेने के लिए में Xcode पुनः आरंभ करना ।

हैप्पी हैकिंग!

संबंधित मुद्दे