使用Vim代替(或与)Xcode进行iOS开发

72

Xcode自带许多对于开发iPhone和/或iPad的必备工具,实际上其中许多我甚至都不知道因为这些工具大多是“幕后”的。

另一方面,最近我接触到了使用Vim编辑器的优势。是否有设置可以使得在开发iOS平台时使用Vim成为一种高效的选择?或者说将两者结合起来会非常复杂,以至于使这个问题无意义?

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

10个回答

99

使用Vim进行iOS或Mac开发可以非常强大和快速,特别是如果您使用TDD(测试驱动开发)或需要快速反馈。

但是,要使其正常工作需要一些技巧。您需要知道的几个重要事项是:

  • 使用xcodebuild命令行工具从一些vimscript运行您的构建和单元测试。
  • 使用clang_complete插件在vim内提供完整的代码自动补全功能。
  • 使用ios.vimcocoa.vim插件进行导航。

这是我首选的工作方法。实际上,我编写了ios.vim插件,以使更多人更容易地开展iOS或Mac开发。


我也被启发了,VIM对开发带来的生产力提升。@eraserhd在iOS/Cocoa开发中展示了这一点。我会自己深入研究的。 - levous
这个在Linux下能用吗?而且你能在这个设置下使用应用商店吗? - pfnuesel

21

我已经有过这种经历了...

我喜欢vim,经常在*nix平台上进行日常C++开发,但我也喜欢Xcode的所有功能,尤其是最新的Xcode >= 4.3和clang后端,它们在自动完成和符号引用方面真正提供了额外的帮助。

我认为我已经找到了一个最佳解决方案,那就是伟大的(虽然不被苹果官方支持)XVim插件

希望未来的Xcode升级不会破坏它(它仍然可以与最新的4.5开发者预览版本很好地配合使用),这确实使您能够保持手指的移动方式,就像在vim中学习一样,在使用Xcode时,对我来说这是最佳解决方案。


看起来xvims有很多bug,一些vim命令无法使用。 - Albert.Qing
自2019年5月19日起已失效。 - Code Wiget
XVim2似乎正在工作。在Xcode 11.4.1中进行了测试。https://github.com/XVimProject/XVim2 - David James

7
如果你不是同时在Vim和XCode编辑器中编辑同一个文件,那么它们可以很好地共存。如果你这样做了,它们都会警告文件已被外部修改。在这方面,终端版本的Vim要容易一些:只有在你尝试保存文件时才会提醒你,并询问“你确定吗”,而MacVim和XCode编辑器会在每次返回文件时都提醒你。
XCode允许您按文件类型选择打开文件时使用的外部应用程序。在XCode首选项中,转到“文件类型”选项卡,然后“文件- >文本- >源代码”。可以将“优选编辑器”设置为外部程序,例如MacVim;请注意,“Emacs”应该已列出为一个选项:当选择Emacs时,XCode会在终端中启动Terminal.app与Emacs。此“优选编辑器”设置的问题在于,每次打开文件时都会获得一个新窗口,这可能与您的工作流程不匹配。
Vim的“remote”功能在这里可能会很有用,参见“:help remote”。通过一些工作和上述的“优选编辑器”偏好,您应该能够将要编辑的文件发送给任何实例的Vim,包括在xterm内运行的现有Vim。我记得Emacs也提供了类似的功能。
但这并不意味着您不能在不设置“优选编辑器”的情况下使用Vim:只需像平常一样打开和编辑项目文件即可。
你的工作流程可能是使用Vim编辑代码,并切换到XCode构建项目,但是Vim也可以运行与XCode相同的构建工具,稍微努力一下,您甚至可以跳转到带有错误的行。XCode依赖于gdb进行调试,通过插件,Vim也可以很好地使用gdb进行调试。
当然,Vim无法取代Interface Builder之类的东西,但是iOS开发的几乎所有其他方面都可以通过使用Vim-only解决方案来实现。
或者只是使用Vim更快地编辑代码,并继续使用XCode进行其他操作。

我记得文件类型,但在研究答案时查找了一下,现在没有任何迹象。我希望有这个功能。我尝试了几种替代方法,教Finder如何打开.m和.h文件,但仍然没有成功。vim remote听起来像是emacs server mode和emacsclient。这可以解决终端问题。Aquamacs在单独的缓冲区(选项卡)中打开。 - Gordon Dove

5

从 Xcode 13.0 Beta 开始,您可以在 Xcode 中使用 Vim 键绑定。 它在设置中启用:

Preferences → Text Editing → Editing → Enable Vim key bindings

编辑(来自@fangxing的更正):

现在切换所谓的 Vim 模式 的方法已更改:

Menubar → Editor → Vim Mode

1
对于Xcode13 beta4,已更改为“Vim模式”,并移动到菜单栏“编辑器-> Vim模式”。 - Fangxing
1
Vim 模式缺乏太多功能,其不足之处令人沮丧。我希望苹果的 Xcode 开发人员能够继续增强和改进它。显然,那个人是 Vim 爱好者,所以请继续为此奋斗! - Eljay

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

在XCode 5.1中,XVim会经常崩溃。但它已经有了进展,并且到目前为止,在XCode 6上运行得相当不错。但是,您只能以这种方式获得VIM的子集,例如,您无法将编辑器拆分为同时查看两个文件。您可以轻松使用Shift-Command-X启用/禁用它。

(很抱歉以回答而不是评论的形式发布此内容,但是stackoverflow的声望系统不允许我这样做)


1
我强烈推荐YouCompleteMe!除了代码补全外,它还可以在受影响的行上实时显示语法错误,无需手动触发编译器(即非常类似于XCode编辑器的功能)。YCM创建者的描述相当详细:

YouCompleteMe是一个快速的、随打随现的模糊搜索代码完成引擎,适用于Vim。它有几个完成引擎:基于标识符的引擎可与每种编程语言一起使用;基于语义的Clang引擎可为C/C++/Objective-C/Objective-C++(从现在开始称为“C家族语言”)提供本地语义代码完成...

要运行它:
  • 按照“Mac OS X超快速安装”部分的说明进行操作
  • 别忘了在项目文件夹的根目录中添加.ycm_extra_conf.py文件

编辑:

如果没有像YouCompleteMe这样的插件,VIM只能进行基本的单词自动完成(Ctrl-N),它既不了解你正在使用的编程语言,也不了解你项目中的所有其他文件。在键入“。”或“ ->”后,您也无法获得对象成员列表。因此,在输入时,您会错过XCode为您提供的许多帮助(因此速度变慢)。此外,当您在代码中犯拼写错误或其他错误时,VIM不像XCode那样发出警告。YouCompleteMe正好为VIM添加了这些缺失的功能,并使iOS开发在VIM中变得轻松愉快。

您可以使用xcodebuild来构建和运行您的项目,但我个人更喜欢同时使用VIM和XCode。它们都会在彼此修改文档后自动重新加载。将XCode用于调试、剖析和部署。


1
这可能有所帮助,但OP似乎更关心iOS特定的功能。 - matsjoyce
@matsjoyce:YouCompleteMe支持主要的iOS编程语言Objective-C和C++(但尚不支持Swift),因此我认为这对于“使用Vim代替(或与)Xcode进行iOS开发”的楼主来说非常相关。但是我想我应该补充说明,我仍然使用XCode进行调试、性能分析等操作。 - Samuel Gaehwiler

1

使用AppCode与Xcode并行编程真是太棒了。代码更改会立即同步!我对这个设置感到非常满意,因为我终于可以在编写iOS应用程序时使用vim(作为AppCode插件)。AppCode还有其他优点,所以我真的建议你去看看。在我的看法中,重构工具也更好。例如,它可以提取Xcode无法提取的方法,如果它不能提取方法,它至少会告诉你原因。


0

我喜欢XVim用于XCode。不幸的是,它在XCode 5.1上出了问题(有些人可以使用开发分支,但我不能)。

试用后,我最终转向AppCode,我真的很喜欢它的标签管理、重构和代码分析功能。代码会自动与XCode同步,所以我同时运行两个(XCode用于构建设置、管理资源目录。AppCode用于其他所有内容)。

第一天下载后,我安装了IdeaVim,这样我仍然可以使用一些Vim键盘快捷键。

虽然插件无法完全实现Vi/Vim的功能,但我发现与本地IDE命令混合使用已足够弥补不足。


0

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

大多数情况下,坚持使用Xcode,但当你需要emacs的强大功能,或者可能是vim(批量重复编辑宏是我的主要原因),只需通过“显示在Finder中并打开”或者切换到你的编辑器并从那里导航到文件进行编辑。 当你切换回XCode时,它会意识到文件已经改变。

对于普通代码,我会坚持使用Xcode,它的代码补全基于对代码的更多了解,所以完胜emacs或vim。连续代码检查是无价之宝,而且正如前面提到的,直接访问文档非常棒(如果你还没有找到,可以选择点击选项)。


-5

根据我的观点,Xcode是更好的解决方案。它拥有许多功能,你在Vim中找不到或添加这些功能。其中一些功能包括:

  • 界面构建器(可以在较短时间内创建出外观漂亮的接口)
  • ARC(自动引用计数——内存管理)
  • 自动化流程管理代码签名和应用商店提交

这个清单非常长,而且Apple始终鼓励您使用Xcode,而不是其他任何IDE。


谢谢@Rahul,但我也想知道如何与Xcode协作。例如,使用你提到的所有内容,但是用vim编辑文本文件。或者这样做没有意义吗? - Eric Brotto
你可以使用vim编辑.h和.m文件,这是你的选择,但最好还是坚持使用Xcode,它有一些漂亮的主题和代码缩进以及许多其他你在vim中找不到的功能。 - Rahul Vyas
3
Rahul,你可能误解了重点。他想在vim有意义的地方受益,并在必要时使用XCode,并且希望以最佳方式实现这一目标。目标不是替代XCode,而是补充它。这种误解与所有可怕的vim-vs.-emacs争论有着相同的根源。 - sjas
您可以在Xcode下始终使用优秀的XVim插件,这样您就可以拥有Xcode的所有功能以及Vim的出色文本编辑能力(您可以在我的屏幕录像中看到其中一些)。 - Stefan Ogonek
ARC与XCode无关。它在几乎所有的SWIFT和Obj-C/C++编译器中都可用。而且谁在乎苹果想要什么?许多大型软件产品并不是在XCode上构建的,而是在CI系统上使用XCode工具链。 - af1n

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接