clang_complete:iOS的Vim自动完成

所以最近我一直在试图build立一个基于Vim的iOS工作stream程。

我发现了clang_complete,并在我的.vimrc中设置了clang用户选项

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

如下所述: http : //www.zenskg.net/wordpress/?p=199#comment-229

并添加了一些框架/头/ libpath。 我不打算张贴整条线,因为它是巨大的。

所以我使用clang从命令行(使用相同的选项)testing了我的项目中的一个文件的编译,它编译得很好,但是只有在使用-arch armv6/7标志的时候。 如果我不尝试编译i386和抱怨缺less头文件。

到现在为止还挺好。 现在我只是使用与clang clang_complete的选项,在.vimrc clang_complete的用户选项。

不。 当我这样做,并尝试在Vim自动完成一个字,它说

  unknown argument: '-arch' 

在Vim的QuickFix列表中。 我需要这个标志,我应该怎么做?

任何想法有用。 我很想在Vim下使用iOS代码完成工作。

clang_complete运行clang -cc1 ,这会导致编译器前端运行而不是驱动程序。 编译器前端不理解-arch选项。 clang -cc1 --help会告诉你可能的select。 你应该指定-triple-target-*

如果您不确定要使用什么,则可以按照以前的方式手动运行clang,但以详细模式( -v )运行。 这样它将打印clang -cc1命令行,您可以在其中find适当的参数。

默认情况下,clang_complete是使用clang二进制文件/usr/bin/clang ,但Xcode不是。 它使用/Developer/usr/clang-ide/lib/libclang.dylib/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 – 我有一些其他的问题让clang_complete可以用于iOS开发,你可能想看看这个fork: https : //github.com/krisajenkins/clang_complete 。我现在太新了,以至于无法真正了解我正在做,但它为我工作…)

使用5.1 sdk,即使使用libclang.dylib,我也无法使用-arch。

经过一番修改(即按照build议手动运行xcodebuild生成的clang命令),我最好的设置是:

 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或其他地方(显然这个标志允许铛驱动程序和原始cc1标志的混蛋组合通过)提到的唯一的事情。 一旦这个被添加,它突然只是至less为Cocoa和UIKit完成工作(尝试键入[NSString Cx Cu ))。

然而,一些东西仍然温和地被破坏。

键入: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 

此外,即使我已经将各种-I标志添加到我的.clang_complete文件或直接添加到clang_user_option的string, clang_complete只能在我的项目中使用一些但不是全部的标题…没有明显的原因,为什么一个作品但不是其他人。 (欢迎提出build议)。

Interesting Posts