2011-10-20 2 views
5

그래서 최근에는 Vim 기반 iOS 워크 플로우를 설정하려고했습니다. clang_complete : iOS 용 Vim 자동 완성

나는 clang_complete을 발견, 여기에 설명 된대로 그렇게

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

처럼 내의 .vimrc에 그 소리 사용자 옵션을 설정 한 : http://www.zenskg.net/wordpress/?p=199#comment-229

몇 프레임 워크/헤더/lib 디렉토리 경로를 추가했다. 거대하기 때문에 전체 라인을 게시하지 않을 것입니다.

그래서 나는 (동일한 옵션을 사용하여) 명령 줄에서 clang를 사용하여 내 프로젝트의 파일 중 하나의 컴파일을 테스트하고, 내가 -arch armv6/7 플래그를 사용하는 경우에만 경우 잘 컴파일하지만. 그렇지 않으면 i386 용으로 컴파일을 시도하고 헤더 파일이 누락되었다고 불평합니다.

지금까지 그렇게 좋았습니다. 이제는 내가 정확히 clang에 준 정확한 옵션을 사용하여 clang_complete의 사용자 옵션 내 .vimrc에 오른쪽으로?

아니요. Vim에서 자동 완성을 시도하면 Vim의 QuickFix 목록에

이 표시됩니다. 나는이 깃발이 좀 필요해. 어떻게해야합니까?

유용한 아이디어. Vim에서 iOS 코드 완성 작업을하고 싶습니다.

답변

3

clang_complete는 clang -cc1으로 실행되며 드라이버가 아닌 컴파일러 프런트 엔드가 실행됩니다. 컴파일러 프런트 엔드에서 -arch 옵션을 이해하지 못합니다. clang -cc1 --help에 가능한 옵션이 표시됩니다. -triple 또는 -target-* 중 하나를 지정해야합니다.

무엇을 사용해야할지 확실하지 않으면 수동으로 clang을 수동으로 실행할 수 있지만 상세 모드 (-v)로 실행할 수 있습니다. 이렇게하면 적절한 인수를 찾을 수있는 clang -cc1 명령 줄이 인쇄됩니다.

+0

정말 고마워요. xcodebuild를 verbose 모드로 실행하고 clang 옵션을 복사 한 다음 자세한 옵션에서 clang을 실행 한 다음 clang -cc1 옵션을 출력에서 ​​my .vimrc로 복사했습니다. clang_complete 여전히 내 코드를 autocomplete 할 수 없다. -frameworks 플래그를 -cc1과 동등하게 사용하지 않아야한다고 생각한다. 어떤 문서를 가르쳐 주시겠습니까? 맨 페이지는별로 좋지 않습니다. 여러분이 저에게 말하지 않으면 -cc1 옵션에 대해 전혀 알지 못했을 것입니다. – Sam

+1

open ~/.vim/plugin/clang_complete.vim (또는 clang_complete가 설치된 곳)을 열어서 ClangCompleteBinary 함수를 찾아보십시오. 거기에 시도해 볼 수있는 두 가지가 있습니다 : 1. v : shell_error 조건 블록을 주석 처리하십시오. Clang은 컴파일 오류가 있어도 좋은 완료 옵션을 반환하는 경우가 많으며 clang_complete는이 사실을 무시합니다. 2. 시스템 (l : 명령. '| & tee /tmp/clang.log')으로 시스템 (l : 명령)을 변경하고 vim에서 완료를 트리거하십시오. 그러면 /tmp/clang.log에서 clang의 정확한 오류 출력을 볼 수 있습니다. 도움이 되길 바랍니다. –

3

기본적으로 clang_complete는 clang 바이너리 /usr/bin/clang을 사용하지만 Xcode는 그렇지 않습니다. clang 라이브러리 /Developer/usr/clang-ide/lib/libclang.dylib을 사용하고 있습니다. 그들은 거의 같지 않습니다. Xcode가 사용하는 옵션을 복사하는 경우 clang_complete도 라이브러리 버전을 사용해야합니다. 당신의 .vimrc 파일에이 같은

뭔가를 수행해야합니다

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

내가 -arch i386이 수락, 그렇게합니다.

(PS - 나는 아이폰 OS 개발을위한 작업을 clang_complete을 받고 다른 몇 가지 문제가 있었다 당신은 이 포크 체크 아웃 할 : https://github.com/krisajenkins/clang_complete를 정말 내가 뭘하는지 알고 그 소리 너무 새로운 해요.. ,하지만 나를 위해 일하고있어 ...)

0

5.1 sdk를 사용하면 libclang.dylib를 사용할 때조차도 -arch를 사용할 수 없습니다.일부 구부릴 후

은 (즉, 수동으로 제안으로 -v 플래그 xcodebuild에 의해 생성 된 그 소리의 명령을 실행), 내 가장 친한 설치했다 :

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' 

-cc1를 추가

내가 언급을 참조하지 않는 유일한 것입니다 Stackoverflow 또는 다른 곳에서 다른 리소스 (분명히이 플래그를 통해 clang 드라이버 및 원시 cc1 플래그의 나쁜 조합을 통과 할 수 있습니다). 이것이 추가되면 갑자기 Cocoa와 UIKit 완성 ( [NSString C-x C-u을 입력 해보십시오)에 대한 작업이 완료되었습니다.

그러나 아직은 다소 완고합니다.

:copen를 입력하면 나는 완료 (그렇지 않으면 성공) 한 후이를 참조하십시오

/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 

또한, 나는이 clang_user_option의 문자열로 직접 하나 내 .clang_complete 파일이나, clang_complete에 다양한 -I 플래그를 추가 한 경우에도 내 프로젝트의 헤더 중 일부만 사용하지만 일부는 작동하지 않는 이유는 분명합니다. (제안 환영).

관련 문제