2011-10-20 16 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にパスを追加しました。私はそれが巨大なので、行全体を投稿するつもりはありません。

私は-arch armv6/7フラグを使用するのであれば、私は(同じオプションを使用して)、コマンドラインからclangを使用して、私のプロジェクト内のファイルの1のコンパイルをテストし、それが正常にコンパイルされますが、のみ。私がそれをしないと、i386用にコンパイルしようとしていて、ヘッダーファイルが紛失していると訴える。

これまでのところとても良いです。今私はclangclang_completeのユーザーオプションの私の.vimrcに与えたものとまったく同じオプションを使用していますか?

いいえ。 Vimで単語をオートコンプリートしようとすると、VimのQuickFixリストには

と表示されます。私はちょっとこの旗が必要です - どうすればいいですか?

便利なアイデア。 Vimの下でiOSコードの補完をしたいと思っています。

答えて

3

clang_completeがclang -cc1を実行するため、コンパイラのフロントエンドが実行され、ドライバは実行されません。コンパイラのフロントエンドは-archオプションを理解していません。 clang -cc1 --helpは可能なオプションを表示します。おそらく-tripleまたは-target-*のいずれかを指定する必要があります。

何を使用するかわからない場合は、手動でclangを冗長モード(-v)で実行できます。これにより、適切な引数を見つけることができるclang -cc1コマンドラインが表示されます。

+0

ありがとうございました...これは私にさらに多くをもたらしました。 xcodebuildを冗長モードで実行し、clangオプションをコピーしてからこれらのオプションをverboseモードで実行し、clang -cc1オプションを出力からmy .vimrcにコピーしました。 clang_completeはまだ自分のコードをオートコンプリートできませんが、-frameworksフラグを使用する必要があると思います。いくつかのドキュメントを教えてください。マニュアルページはあまり良くありません。あなたが私に言わないと、-cc1オプションについて知らなかったでしょう。 – Sam

+1

open〜/ .vim/plugin/clang_complete.vim(またはclang_completeがインストールされている場所)を試して、ClangCompleteBinary関数を探してみてください。ここには2つのことがあります: 1. v:shell_error条件ブロックをコメントアウトします。 Clangはコンパイルエラーがあっても良い補完オプションを返すことが多く、clang_completeはこの事実を無視します。 2.システム(l:command。 '|&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 - 私は他の問題のiOS開発のために働くclang_completeを得ることのカップルを持っていたあなたはかもしれこのフォークをチェックアウトしたい:https://github.com/krisajenkins/clang_complete私は本当に私がやっているかを知るために打ち鳴らすには余りにも新たなんです。しかし、それは私のために働いている...)

0

5.1 sdkを使って、私はlibclang.dylibを使っていても-archを受け入れることができませんでした。いくつかのfutzing後

(提案として、すなわち、手動-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フラグの徹底的な組み合わせが通過することを可能にします)。これが追加されると、突然、少なくともココアとUIKitの完了(少なくとも[NSString C-x C-uと入力してください)のために働いていました。

しかし、なんとなく軽度に逮捕されています。私はclang_user_optionの文字列への私の.clang_completeファイルまたは直接のいずれかに様々な-Iフラグを追加したにも関わらず、また

/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_complete:私は(成功したか、そうでなければ)が完了した後、これを見る:copenを入力

プロジェクトのヘッダーの一部でしか動作しませんが、他のものは動作しないという明白な理由はありません。 (提案は歓迎されます)。