以前介紹過一些vim插件,有兩個插件是方便寫iOS程序的,即cocoa和objc_matchbracket(以下稱objc_mb)。cocoa插件主要用來補全cocoa框架的API名,objc_mb則用來自動補全中括號。
不過這兩個插件都不支持后綴.mm的objective-C++文件,需要做一些改動。
在vim中運行
1 :e $VIMRUNTIME/filetype.vim
發現vim收集的文件類型還挺全的,連.mm文件是objcpp都知道……
於是讓插件支持objcpp類型就行了。
1) cocoa插件:
打開~/.vim/plugin/cocoa.vim,有如下一段:
1 au FileType objc ru after/syntax/objc_enhanced.vim 2 \| let b:match_words = '@\(implementation\|interface\):@end' 3 \| setl inc=^\s*#\s*import omnifunc=objc#cocoacomplete#Complete 4 \| if globpath(expand('<afile>:p:h'), '*.xcodeproj') != '' | 5 \ setl makeprg=open\ -a\ xcode\ &&\ osascript\ -e\ 'tell\ app\ \"Xcode\"\ to\ build' 6 \| endif
當然看不懂,不過把這段復制一遍,再把第1行的objc改成objcpp就可以讓cocoa插件支持objective-C++了。
2) objc_mb插件:
打開~/.vim/ftplugin/objc_matchbracket.vim
看不懂關掉。復制此文件,文件名改為objcpp_matchbracket.vim,再把里面的objc替換成objcpp就成了。
這樣就可以在.mm文件中享用二插件了。
不過還是有問題——原來一堆C,C++插件不認.mm文件。筆者是在.vimrc文件中寫了個補丁,可以手動修改.mm文件的類型——objcpp或cpp:
1 function ChangeFiletypeBetweenCppAndObjcpp() 2 if &filetype=="cpp" 3 set filetype=objcpp 4 else 5 set filetype=cpp 6 endif 7 endfunction 8 9 map<F4> :call ChangeFileTypeBetweenCppAndObjcpp()<ENTER>
這樣就可以按F4切換.mm文件的類型,以令其適應不同的插件。