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议)。