Emacs、Objective-C 和自动完成
Posted
技术标签:
【中文标题】Emacs、Objective-C 和自动完成【英文标题】:Emacs, Objective-C, and autocomplete 【发布时间】:2010-10-14 16:49:01 【问题描述】:我最近切换到 emacs 进行代码编辑,而且大部分情况下效果很好。
但是,对于 Objective-C,我发现自己缺少 Xcode 的自动完成功能,因为我无法记住长函数名称,例如
- (id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)windowStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)deferCreation screen:(NSScreen *)screen;
有没有办法在 emacs 上获得 Xcode 样式的自动完成功能?
另外,我应该有什么好的包来帮助 Cocoa 或 Objective-C?
【问题讨论】:
我会注意到您可以在 Xcode 中使用 Emacs 键绑定,这样您就可以在 Xcode 中获得 Emacs 的一些优势。 取消标记 cocoa,因为它与 Objective-C 更相关,并且因为“Cocoa 自动完成”是完全不同的东西。 【参考方案1】:编辑文件auto-complete.el
(当然是在你安装“auto-complete”包的文件夹中查找):
转到第 165 行,我保证你已经知道该做什么了。 :)
【讨论】:
我更喜欢M-x
custom-variable RET
ac-mode RET
。或者甚至更好的 .emacs 添加 (setq ac-mode (cons 'objc-mode ac-mode))
【参考方案2】:
我写了一个脚本来导出 Cocoa SDK 中的函数定义为 yasn-p sn-ps:http://github.com/zegal/yasobjc
在 ETAGS 和自动完成的帮助下,完成体验非常接近 XCode。你可以试一试。
【讨论】:
非常聪明,超级有用,我喜欢它!谢谢zegal 干得好!但是,我想知道是否有可能将其与语义联系起来?如果我知道消息名称,yasn-p+yasobjc 可以完成,但如果我需要先找到正确的消息怎么办?语义可以确定所讨论对象的类型,并从 yasn-ps 呈现有效消息。【参考方案3】:在clang svn 中找到的clang-completion-mode.el
是一个有点bug 和hacky 但非常好的解决方案。
【讨论】:
【参考方案4】:我还没有尝试过,但是 company-mode 有一个 xcode 后端可能会很有帮助:
http://nschum.de/src/emacs/company-mode/
【讨论】:
【参考方案5】:我没有使用过 XCode,但是 emacs 带有几种自动完成模式。
见:
内置 dabbrev-expand(M-/ 运行命令 dabbrev-expand “自动完成”部分写入的文本) AutoComplete HippieExpand还有cedet 用于更复杂的东西 - 但不幸的是我认为它不适用于objective-c。
【讨论】:
谢谢,我不确定这些中的任何一个是否能很好地工作(看起来没有足够的上下文敏感),我想我可能只是坚持使用 XCode for Objective-C。以上是关于Emacs、Objective-C 和自动完成的主要内容,如果未能解决你的问题,请参考以下文章