Answers:
可以在emacs中的任何类型的缓冲区上工作的基本方式是点击(aka + )使用的动态缩写M-/
alt/
这将扩展文本以复制当前缓冲区或当前打开的其他缓冲区中已经存在的其他字符串。
要获得特定于C ++或Java(或其他语言)的语言的更广泛的代码完成功能,您需要查看代码模板或代码段包。在StackOverflow的相关问题中有一些讨论。这些讨论中通常提到的一个是yasnippet- 此帖子在emacs博客上有一个截屏演示。
@Doug的答案有点过时了,他的重点是通过使用预定义的代码片段进行代码扩展。
我认为OP的问题与智能感知有关(例如,类的自动完成方法名称)。
嬉皮扩展曾经很流行,语法分析器是emacs标签。因此它支持ctags支持的所有语言(包括C ++,Java)。但是结果并不完美,因为ctags仅使用正则表达式来分析代码。有关详细信息,请参见我的init-hippie-expand.el。您可以先检查的值hippie-expand-try-functions-list
自动完成功能是一种具有精美用户界面(下拉菜单,甚至在控制台窗口中)的现代功能。如果您使用clang作为后端。智能感知要好得多。要使clang正常工作,您需要安装auto-complete-clang,它是auto-complete的插件。它仅支持clang支持的语言(C / C ++ / Obj-C)。正如Sylvain Benner指出的那样,您可以将emacs-eclim用作Java解析后端,该后端实际上调用eclipse的可执行文件。因此,自动完成功能可以支持Java。有关详细信息,请参见我的init-auto-complete.el。
语义提供UI和后端解析引擎。太慢了 下拉UI可以,但需要X窗口。智能感知的结果优于ctags。这份文件对我来说太怪异了。有关详细信息,请参见init-semantic.el。
公司模式类似于自动完成,区别在于它将所有内容打包到一个包中。例如,C ++开发人员只需要安装公司模式(自动完成需要一些第三方插件)。UI的另一个区别是公司将自动显示候选人。因此,您在公司中按的键较少。自定义后,可以在自动完成中执行相同的操作。
综上,自动完成,公司是最受欢迎的两种选择。语义和嬉皮扩展也受到欢迎,但使用较少。其他人则微不足道,四大巨头已经涵盖了它们的功能。例如,自动完成可以使用yasnippet作为输入源(自动完成提供UI,但是实际的候选者由yasnippet后端生成)。
我建议使用自动完成或公司作为主要代码完成插件,而语义或嬉皮扩展作为补充插件。
我使用公司模式和嬉皮扩展,因为,
现在(2017年)公司模式比自动完成更积极地维护,并且具有更多的第三方插件(例如,latex插件)
hippie-expand不是很活跃,但是它不占用TAB
公司模式/语义/自动完成功能使用的密钥
如果您将公司模式用于C ++ / Java,则可能需要进行修改company-backends
。
有关公司模式的其他一些技巧,
您可能需要调整的值company-backends
。例如,假设其值为(company-eclim company-semantic company-clang (company-dabbrev-code company-gtags company-etags company-keywords))
。然后,如果company-eclim
可以得到非零的候选者,则company
认为您正在编写Java,因此它将不会在之后运行后端company-eclim
。
现在让我们来看(company-dabbrev-code company-gtags company-etags company-keywords)
。所有这四个后端将一起使用。例如,即使company-dabbrev-code
成功获取了非零候选者之后,仍将执行其他三个后端。
在现实世界中,通常有必要重新调整后端的顺序或添加新的后端(company-rtags
例如)。
简短答案: M-/
长答案:RTFM :-)
C-h r
)
C-h k M-/
样
complete.el
尝试一下标准库。它非常老,鲜为人知,但是它提供的缓冲区内完成类型可能很有用。M-x find-library complete
,然后阅读文件中的注释。