Use Vim for iOS project development
iOS project Editor
一般对于iOS开发者来说Xcode是进行开发的首选工具,这也是苹果官方的开发工具。
如果是非专职iOS开发者,那么也有极大的概率使用着其他开发工具。比如写flutter或者rn这种非native app,则可能会直接使用VSCode;对于native app除了vscode也有其他选择,比如jetBrains家的App Code,已经做的非常好,甚至集成了CocoaPods,不过AppCode貌似是收费的。
如果你是Vim爱好者,那么很容易在Xcode以外的这些工具中找到Vim插件,体验不错,常用的功能都有。
对于Xcode官方也已经在Xcode13中提供了Vim keybind支持,不过很基础,一些常用的功能体面没有提供,使用使用体验与原生Vim存在差距。
Language Server Protocol
其实现阶段在类似sublime、vscode、Emacs中跨行编辑代码并不是难事,多亏了微软主导的Language Server Protocol,每个语言的开发者据此协议提供自己语言服务器以对外提供接口,然后编辑器只需要遵循这个协议即可轻松实现对各种语言的对接,编辑器只需要做好自己的使用体验,界面,输入优化等。
graph TD;
S(Swift) --> D;
A(Java) --> D;
B(JavaScript) --> D;
C(C/C++) --> D;
D(Language Server Protocol) --> E(Vim);
D --> F(Sublime);
D --> G(VSCode);
D --> H(Emacs);
Use Vim for iOS project development
而本文要讨论的则是一个更加朴素的环境,终端中的Vim,在终端中使用Vim来进行iOS工程的编写。
虽说是终端编写,但并不是说不需要Xcode了,Vim中做的只是编辑代码,仍需要使用Xcode来进行编译和运行以及Debug。
最终达成的效果是,用Xcode新建一个工程,编译,生成编译日志并将其解析为可供lsp-server使用的数据,在Vim中调用lsp-server提供自动补全、定义跳转等支持,在Vim中进行代码编写。
graph TD;
A(XcodeCompile/Debug)--> |compile| B;
subgraph prepare info for Language Server
B(compile log)-.-> |Objective-C| X;
B(compile log)--> |Swift| Xa;
X(xcpretty/XCCompilationDB process) -.-> |compile_commands.json| L;
Xa(Xcode Build Server process) --> |.compile| L;
end
subgraph Vim-lsp<=>Language server Interactive
L((Vim-lsp)) -.- |json-compilation-database| Cl(Clangd);
L --- |Build Server Protocol| S(Sourcekit);
end
L === |LSP support: autoCompleteion/goToDefinition...| C;
C((Coding In Vim));