2011-02-10 33 views
21

Có cách nào để chỉnh sửa đoạn mã dựng sẵn của Xcode không? Có một nút chỉnh sửa, nhưng nhấn nó có vẻ không cho phép thay đổi văn bản của đoạn trích.Đoạn mã dựng sẵn Xcode chỉnh sửa

Bất kỳ thông tin chi tiết nào được đánh giá cao.

+0

Xcode 4 vẫn dưới NDA –

+0

Xcode 4 không còn thuộc NDA nữa. –

Trả lời

2

Hoặc đây là lỗi hoặc đó là một tính năng. Tôi tin rằng đó là sau này. Bạn có thể thêm đoạn trích của riêng mình nhưng bạn không thể chỉnh sửa các đoạn mã được tích hợp sẵn. Tôi chỉ cần tạo một đoạn mã mới và tùy chỉnh nó theo cách bạn muốn.

6

Bạn có thể chỉnh sửa các đoạn mã hệ thống bằng tay:

  1. Đến thư mục này: "/ Developer/Library/Xcode/PrivatePlugIns".
  2. Show Package Contents của "IDECodeSnippetLibrary.ideplugin"
  3. Open "Contents/Resources/SystemCodeSnippets.codesnippets" như file văn bản
  4. Chỉnh sửa nó

.codesnippets tập tin là một plist nhưng một số chuỗi ký với CR/LF và không thể chỉnh sửa bằng trình chỉnh sửa plist chuẩn.

+3

Trong Xcode 4.3.2, đây là "/Applications/Xcode.app/Contents/PlugIns/IDECodeSnippetLibrary.ideplugin/Contents/Resources". – Mundi

+1

Dành cho ứng dụng tự chứa của Xcode. Đây là đường dẫn tệp chính xác của các đoạn mã mặc định: "/Applications/Xcode4.3.3.app/Contents/PlugIns/IDECodeSnippetLibrary.ideplugin/Contents/Resources/SystemCodeSnippets.codesnippets" – LightMan

1

Tôi đã viết kịch bản ngày hôm nay sử dụng python và uncrustify để trích đoạn trích ra khỏi Xcode, định dạng lại theo ý thích của tôi và đưa chúng vào thư mục nơi tôi có thể nhập chúng vào ~/Library/Developer/Xcode/UserData/CodeSnippets. Trên github tại đây: Xcode4Customization

17

Bạn vẫn không thể chỉnh sửa đoạn mã hệ thống được tích hợp sẵn. Tuy nhiên, bạn có thể chỉnh sửa đoạn trích "người dùng". Các giải pháp đơn giản nhất trong tâm trí của tôi là tạo bản sao của tất cả các đoạn mã mặc định, nhưng sửa đổi chúng để chúng là đoạn "người dùng" và ghi đè lên các phiên bản mặc định. Tôi đã viết một kịch bản Python nhỏ để thực hiện công việc. Nó rất đơn giản, và sau khi chạy tất cả các đoạn mã Xcode sẽ có thể chỉnh sửa một cách kỳ diệu thông qua GUI Xcode. Không cần phải mút xung quanh trong plist bằng tay:

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.") 

Bạn sẽ nhận thấy rằng nó không thực sự thay đổi bất kỳ tệp nội bộ của Xcode. Nó chỉ thêm các tệp và Xcode đủ thông minh để sử dụng các tệp được thêm thay vì các đoạn mã gốc. Bạn có thể quay lại bản gốc bất kỳ lúc nào bằng cách xóa phiên bản người dùng của đoạn mã. Bạn cũng có thể chạy tập lệnh nhiều lần tùy thích mà không phải lo lắng về việc ghi đè bất kỳ đoạn mã người dùng nào được tạo bởi các tập lệnh trước đó.

+0

+1 Giải pháp tuyệt vời, cảm ơn! – InsertWittyName

+0

+1, nhưng có lỗi trong tập lệnh của bạn. Tôi không phải là một guru python nhưng tôi nhận được một lỗi khi tôi chạy kịch bản của bạn dưới terminal. Python báo cáo đường dẫn cho tệp hoặc thư mục (của plist đầu ra) không tìm thấy. Tôi nghĩ rằng bạn đã quên tạo và mở plist có thể ghi trước khi cố gắng viết vào nó trên 'plistlib.writePlist (entry, snippet_path)'. Bằng cách này, xin cảm ơn vì mã của bạn – anonim

+2

@ anonim.developer, cảm ơn mẹo. Tôi đã thử nó trên một chiếc máy sạch sẽ và thực sự là một vấn đề. Nó thực sự xảy ra nếu thư mục đoạn trích của người dùng không tồn tại. Libist lib sẽ tự động tạo tệp nếu cần, nhưng không phải là các thư mục trung gian. Tôi đã cập nhật tập lệnh. –

12

Có một công cụ nhỏ tuyệt vời được gọi là "Chỉnh sửa đoạn trích". Tôi chỉ thử nó, và rất khuyên bạn nên nó. Rõ ràng nó từng là một ứng dụng trả tiền, nhưng tác giả hiện đang cho nó đi miễn phí.

http://cocoaholic.com/snippet_edit/

4

Bạn có thể chỉnh sửa các đoạn hệ thống Xcode sử dụng một trình soạn thảo văn bản và biết vị trí của hệ thống mã snippets tập tin. Trong Xcode 5.1.1 vị trí của tập tin đoạn mã hệ thống đã thay đổi một lần nữa để:

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

và bạn phải có root đặc quyền để chỉnh sửa file plist tại chỗ vì chủ sở hữu và quyền của nó như sau:

$ 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 

các phím điển plist là khá tự giải thích và cho IDECodeSnippetIdentifier quan trọng, bạn có thể tạo cho mình UUIDs sử dụng ví dụ lệnh:

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

Một khi bạn đã chỉnh sửa các tập tin sử dụng ví dụ sudo và biên tập viên của bạn lựa chọn, bạn phải khởi động lại Xcode để đón những thay đổi của bạn.

Hacking vui vẻ!

Các vấn đề liên quan