2011-10-20 31 views
5

Vì vậy, gần đây tôi đã cố gắng thiết lập quy trình làm việc iOS dựa trên Vim.clang_complete: Tự động hoàn thành Vim cho iOS

tôi thấy clang_complete, và đã thiết lập các tùy chọn người dùng kêu vang trong vimrc của tôi như vậy

let g:clang_user_options='-fblocks -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk -D__IPHONE_OS_VERSION_MIN_REQUIRED=40300' 

như đã mô tả ở đây: http://www.zenskg.net/wordpress/?p=199#comment-229

và bổ sung thêm một vài khung/header/đường dẫn lib. Tôi sẽ không đăng tải toàn bộ dòng vì nó rất lớn.

Vì vậy, tôi đã thử nghiệm biên soạn của một trong những tập tin trong dự án của tôi sử dụng clang từ dòng lệnh (bằng cách sử dụng tùy chọn tương tự), và nó biên dịch tốt, nhưng chỉ nếu tôi sử dụng -arch armv6/7 cờ. Nếu tôi không cố gắng biên dịch cho i386 và phàn nàn về các tệp tiêu đề bị thiếu.

Cho đến nay rất tốt. Bây giờ tôi chỉ sử dụng các tùy chọn chính xác giống như tôi đã cung cấp cho clang, cho các tùy chọn người dùng của clang_complete trong số .vimrc của tôi đúng không?

Không. Khi tôi làm điều đó và cố gắng tự động hoàn thành một từ trong Vim, nó nói

unknown argument: '-arch' 

trong danh sách QuickFix của Vim. Tôi cần lá cờ này - tôi nên tiến hành như thế nào?

Bất kỳ ý tưởng nào hữu ích. Tôi rất thích nhận được mã hoàn thành iOS làm việc theo Vim.

Trả lời

3

clang_complete chạy clang -cc1, khiến trình biên dịch front-end chạy và không phải trình điều khiển. Trình biên dịch front-end không hiểu tùy chọn -arch. clang -cc1 --help sẽ hiển thị cho bạn các tùy chọn có thể. Bạn có thể chỉ định -triple hoặc một trong số -target-*.

Nếu bạn không chắc chắn nên sử dụng gì, bạn có thể chạy bằng tay như bạn đã làm, nhưng ở chế độ tiết (-v). Bằng cách này, nó sẽ in dòng lệnh clang -cc1, nơi bạn có thể tìm các đối số thích hợp.

+0

Cảm ơn bạn rất nhiều ... Điều này giúp tôi tiếp tục hơn rất nhiều. Tôi chạy xcodebuild với trong chế độ tiết, sao chép các tùy chọn clang, sau đó chạy clang với các tùy chọn này trong chế độ tiết, sau đó sao chép các tùy chọn clang -cc1 từ đầu ra vào .vimrc của tôi. clang_complete vẫn không thể tự động hoàn thành mã của tôi mặc dù, tôi nghĩ rằng tôi cần phải sử dụng cờ -frameworks mà dường như không có một tương đương trong -cc1. Bạn có thể chỉ cho tôi một số tài liệu? Các trang người đàn ông không phải là rất tốt-Tôi sẽ không bao giờ biết về tùy chọn -cc1 mà không có bạn nói với tôi. – Sam

+1

Đây là một cái gì đó bạn có thể thử: mở ~/.vim/plugin/clang_complete.vim (hoặc bất cứ nơi nào bạn đã cài đặt clang_complete), và tìm các chức năng ClangCompleteBinary. Có hai điều bạn có thể thử ở đó: 1. Nhận xét ra khối v: shell_error condition. Clang thường sẽ trả về các tùy chọn hoàn thiện tốt ngay cả khi nó có lỗi biên dịch và clang_complete bỏ qua thực tế này. 2. thay đổi hệ thống (l: command) thành hệ thống (l: command. '| & Tee /tmp/clang.log') và kích hoạt hoàn thành từ vim. Sau đó, bạn sẽ có thể thấy trong /tmp/clang.log đầu ra lỗi chính xác từ clang. Hy vọng điều đó sẽ hữu ích. –

3

Theo mặc định, clang_complete đang sử dụng mã nhị phân clang /usr/bin/clang, nhưng Xcode thì không. Nó đang sử dụng thư viện clang /Developer/usr/clang-ide/lib/libclang.dylib. Chúng không hoàn toàn giống nhau. Nếu bạn đang sao chép các tùy chọn mà XCode đang sử dụng, bạn sẽ phải đảm bảo clang_complete sử dụng phiên bản thư viện.

Something như thế này trong tập tin vimrc của bạn nên làm điều đó:

filetype on 
autocmd FileType objc let g:clang_use_library=1 
autocmd FileType objc let g:clang_library_path='/Developer/usr/clang-ide/lib' 

Khi tôi làm điều đó, -arch i386 được chấp nhận.

(PS - Tôi gặp phải một số vấn đề khác khi clang_complete hoạt động để phát triển iOS. Bạn có thể muốn kiểm tra ngã ba này: https://github.com/krisajenkins/clang_complete. Tôi quá mới để kêu gọi thực sự biết mình đang làm gì , nhưng nó làm việc cho tôi ...)

0

Sử dụng sdk 5.1 Tôi đã không thể nhận được -arch chấp nhận ngay cả khi sử dụng libclang.dylib.

Sau một futzing (cụ thể là, tay chạy các lệnh kêu vang được sản xuất bởi xcodebuild với -v cờ như đề xuất), thiết lập tốt nhất của tôi là:

let g:clang_complete_auto = 1 

"not strictly necessary 
set omnifunc=ClangComplete 

let g:clang_user_options='clang -cc1 -triple i386-apple-macosx10.6.7 -target-cpu yonah -target-linker-version 128.2 -resource-dir /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/3.1 -fblocks -x objective-c -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.1.sdk -D __IPHONE_OS_VERSION_MIN_REQUIRED=50100 || exit 0' 

thêm -cc1 là điều duy nhất tôi không thấy đề cập trong các tài nguyên khác trên Stackoverflow hoặc ở nơi khác (rõ ràng lá cờ này cho phép kết hợp bastardized của trình điều khiển clang và cờ cc1 nguyên gốc đi qua). Một khi điều này đã được thêm vào nó đột nhiên chỉ làm việc ít nhất là cho Cocoa và UIKit hoàn thành (hãy thử gõ [NSString C-x C-u).

Tuy nhiên, hiện tượng nào đó vẫn bị vỡ nhẹ.

:copen Tôi thấy điều này sau khi một hoàn thành (thành công hay cách khác):

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.1.sdk/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURL.h|654 col 48 error| expected ';' after top level declarator 

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.1.sdk/System/Library/Frameworks/CoreFoundation.framework/Headers/CFUtilities.h|14 col 39 error| expected function body after function declarator 
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.1.sdk/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h|60 col 32 info| expanded from macro 'CF_AVAILABLE_IOS' 
/usr/include/Availability.h|145 col 53 info| expanded from macro '__OSX_AVAILABLE_STARTING' 
<scratch space>|25 col 1 info| expanded from macro '__AVAILABILITY_INTERNAL' 
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.1.sdk/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h|92 col 10 error| 'CoreFoundation/CFUserNotification.h' file not found 

Ngoài ra, mặc dù tôi đã thêm nhiều -I cờ hoặc là .clang_complete tập tin của tôi hoặc trực tiếp đến clang_user_option s chuỗi, clang_complete chỉ làm việc với một số nhưng không phải tất cả các tiêu đề trong dự án của tôi ... mà không có lý do rõ ràng nào tại sao một tác phẩm lại hoạt động nhưng không phải là những thứ khác. (Đề nghị chào đón).

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