在 iOS 开发中使用 Vim 代替(或使用) Xcode

Xcode 附带了很多对于构建 iPhone 和/或 iPad 必不可少的东西。事实上,很多我甚至不知道,因为它是如此的“幕后”。

另一方面,我最近了解了使用 Vim 作为编辑器的优点。在为 iOS 平台开发时,有没有什么设置可以让使用 Vim 成为一种有效的选择?或者将两者结合起来使这个问题变得毫无意义会不会太复杂了?

换句话说,如果您在同时使用 Vim 和 Xcode 时有任何提示、建议或警告,我洗耳恭听!

36422 次浏览

我认为 Xcode 是更好的解决方案。它有很多你在 Vim 中找不到/添加不到的特性。其中一些是:

  • Interface Builder (在更短的时间内创建好看的界面)
  • 自动参考计数ーー内存管理
  • 管理代码签名和应用程序商店提交的自动化过程

这个列表非常长,苹果总是鼓励您使用 Xcode,而不是其他任何 IDE。

使用外部编辑器肯定有一些优势(然而 emacs 比 vim: }好一千万倍)。

在大多数情况下坚持使用 Xcode,但是当你需要 emacs 或者 vim (我的主要原因是大容量重复编辑器宏)的强大功能时,只需要使用 finder 中的 show 和 open with 来编辑文件,或者只需要切换到编辑器从那里导航到文件。 当你切换回来的时候,XCode 会意识到文件已经改变了。

对于普通代码,我会坚持使用 Xcode,它的代码完成是基于对代码的更多了解,所以 beat 的 emacs 或 vim 的手。持续的代码检查是非常有价值的,正如前面提到的,直接访问文档是非常棒的(如果您还没有找到它,请单击选项)。

我已经去过了。

我喜欢 vim,并且经常在我在 * nix 平台上的日常 C + + 开发中使用它,但是我也喜欢 Xcode 的所有特性,特别是最新的 Xcode > = 4.3和 clang 后端,在自动完成和符号引用方面给出了真正的优势。

我想我已经找到了最佳的解决方案与伟大的(虽然不是苹果官方支持) XVim 插件

希望未来的 Xcode 升级不会破坏它(它在最新的开发者预览版4.5中仍然运行良好) ,这确实可以让你的手指保持移动,就像你在使用 Xcode 时在 Vim 中学到的那样,正如我所说的,这对我来说是最佳的解决方案。

如果您不尝试在 Vim 和 XCode 编辑器 同时中编辑相同的文件,那么 Vim 和 XCode 将很好地共存。如果您这样做,那么每个人都会给您一个关于正在外部修改的文件的警告。Vim 的终端版本在这方面更容易使用: 它只会在您尝试保存文件时发出警告,询问 你确定吗,而 MacVim 和 XCode 编辑器会在您每次返回文件时发出警告。

XCode 允许您在打开文件时按文件类型选择外部应用程序。在 XCodePreferences 中,转到 文件类型选项卡,然后转到 File-> text-> source cecode。可以将 首选编辑设置为一个外部程序,比如 MacVim; 注意,Emacs应该已经被列为一个选项: 当选择 Emacs 时,XCode 在终端中使用 Emacs 启动 Terminal. app。这个 首选编辑设置有一个问题,您将得到一个新的窗口与每个打开的文件,这可能不符合您的工作流程。

Vim 的 remote特性在这里可能很有用,请参见 :help remote。通过一些工作和上面的 首选编辑首选项,应该能够将要编辑的文件发送到 Vim 的 任何实例,包括在 xterm中运行的现有 Vim。我似乎记得 Emacs 提供了类似的东西。

但是这些都不妨碍您使用 Vim 没有设置 首选编辑: 只需像通常那样在 Vim 中打开和编辑您的项目文件。

您的工作流可能是使用 Vim 编辑代码,然后切换到 XCode 来构建项目,但是 Vim 也可以运行 XCode 使用的相同构建工具,只要稍微多做一些工作,您甚至可以跳到有错误的代码行。XCode 依赖 gdb 进行调试,也可以通过插件在 Vim 中很好地使用 gdb。

当然不能指望 Vim 代替 Interface Builder 之类的东西,但是 iOS 开发的其他方面几乎都可以通过一个只有 Vim 的解决方案来实现。

或者只使用 Vim 到 更快地编辑代码,其余部分继续使用 XCode。

使用 Vim 开发 iOS 或 Mac 系统非常强大和快速,特别是如果您使用 TDD 或希望获得快速反馈。

但是需要一些手段才能让它运转起来。你需要知道的几件重要事情是:

  • 使用 xcodebuild命令行工具从某些 vimscript 运行生成和单元。
  • 使用 clang_complete插件从 vim 内部完成完整的代码。
  • 使用 ios.vimcocoa.vim插件进行导航。

这是我最喜欢的工作方式。事实上,我编写 ios.vim插件是为了让更多的人更容易使用它。

我喜欢 XVim的 XCode。不幸的是,它在 XCode5.1中出现了故障(有些人让 Development 分支工作,但我不能)。

经过一次试用后,我最终转向了 应用程式码,我真的很喜欢标签管理、重构和代码分析。代码自动与 XCode 同步,因此我同时运行这两个程序(XCode 用于构建设置,管理资产目录。其他所有应用程序代码)。

我下载它的第一天,我安装了 IdeVim,所以我仍然可以使用一些 Vim 键盘快捷方式。

虽然你不会得到完整的 Vi/Vim 功能与插件。我发现混合使用本机 IDE 命令就足以弥补这一缺陷。

我怎么推荐 You CompleteMe都不够!除了代码完成之外,它还在受影响的行上动态显示语法错误,而不需要手动触发编译器(即非常类似于 XCode 编辑器的特性)。基督教青年会创始人的描述信息量很大:

YouCompleteMe 是一个快速的、即时输入的、模糊搜索代码完成 它有几个完成引擎: 基于标识符的 引擎的工作与每一个编程语言,一个语义, 提供本机语义代码完成的基于 Clang 的引擎 C/C + +/Objective-C/Objective-C + + (从现在起称为 家庭语言”) ..。

为了让它运转起来:

  • 按照“ Mac OS X 超快速安装”部分进行操作
  • 不要忘记将 . ycm _ tra _ conf. py文件添加到项目文件夹的根目录中

编辑:

如果没有像 YouCompleteMe 这样的插件,VIM 只能执行基本的单词完成(Ctrl-N)操作,而 Ctrl-N 既不知道您正在使用的编程语言,也不知道属于您的项目的所有其他文件。在键入“后,也不会得到对象成员的列表。”或’->’。因此,您在输入时错过了 XCode 提供的许多帮助(因此也错过了速度)。另外,当您在代码中出现错误或其他错误时,VIM 也不会像 XCode 那样发出警告。YouCompleteMe 正好为 VIM 添加了这些缺失的特性,使得在 VIM 中开发 iOS 成为一种乐趣。

您可以使用 xcodebuild来构建和运行您的项目,但是我个人更喜欢同时使用 VIM 和 XCode。两个文档在被另一个文档修改后都会自动重新加载。保留 XCode 用于调试、分析和部署。

尽管 MacVim 和 YouCompleteMe是我在 OSX 上开发的主要环境,但是有些任务我更喜欢在 XCode 中完成,比如调试和分析。对于这些场景,我使用 XVim,它为 XCode 增加了 VIM 编辑功能。

在 XCode 5.1 XVim上崩溃了很多次。但是它进步了,到目前为止它在 XCode6中工作得非常好。但是这种方式只能获得 VIM 的一个子集,例如,不能将编辑器分割为同时查看两个文件。使用 Shift-Command-X 可以很容易地启用/禁用它。

(很抱歉把这个作为答案而不是评论发布,但是堆栈溢出的声誉系统并没有让我成为可能)

与 Xcode 并行使用 AppCode 实在是太神奇了。代码更改马上同步!我对这个设置非常满意,因为我终于可以在编写 iOS 应用程序时使用 vim (作为 AppCode 插件)。AppCode 还有其他的优点,所以我真的建议你去看看。恕我直言,重构工具也要好得多。例如,它可以提取 Xcode 由于某种原因不能提取的方法,如果它不能提取方法,它至少会告诉你为什么。

从 Xcode 13.0 Beta 开始,你可以在 Xcode 使用 Vim keybindings:

Preferences → Text Editing → Editing → Enable Vim key bindings

编辑(每@方兴) :

切换 Vim Mode的方式发生了变化:

Menubar → Editor → Vim Mode