理解Emacs完成模式选择

时间:2010-01-20 09:13:41

标签: emacs autocomplete code-completion icicles

似乎有许多替代Emacs自动完成机制。如果没有详尽的搜索,我会想到以下内容:ido,自动完成,冰柱,缓冲区完成,迷你缓冲区完成和标准开箱即用完成。然后是代码完成。很多。而且大部分都依赖于语言。拥有一个或三个Emacs大师在代码和非代码自动完成中总结主要参与者的好处是非常有用的。这就是Stack Overflow,毫无疑问,确定最适合Emacs IDE类机制的自动完成模式会很好。

更新:我刚刚发现了the Emacs Wiki completion page,它放大了我的基本问题:所有这些选择,什么是好的,什么不太好,如果你只能玩2-3,那么你建议?

4 个答案:

答案 0 :(得分:8)

Wrt Icicles -

在大多数情况下,Icicles是关于 迷你缓冲 的完成。在一些情况下,它提供了缓冲区内(例如代码)完成的东西,但它主要是关于迷你缓冲区完成。

当大多数人想到迷你缓冲区完成时,他们会想到文件名完成,缓冲区名称完成和命令名称完成。但是还有一个很多

作为Emacs-Lisp程序员,您可以在任何地方使用完成,以便用户以交互方式进行选择。这很普遍!

完成实际上是关于模式匹配来定义集合,然后您可以对其进行操作。

大多数人认为迷你缓冲区完成的唯一目的是选择一个名称(文件,缓冲区,命令,变量......)。但是,完成的强大功能实际上是以不同的方式过滤并可能对整套文件名,缓冲区名称等进行排序,然后让用户对生成的执行某些操作(不是必然是一个单一的对象)。

这就是 Icicles 的含义:让你动态地(渐进地)使用模式匹配定义集合,然后对所选成员或这些集合的所有成员进行操作。< / p>

这不是 Ido 或其他完成包的目的,可能除了 Helm(Anything)

不同于Helm (Anything),它将对象类型和操作的对象名称作为其起点,在 Icicles 中通常会调用命令来执行到给定类型的一个或多个对象(例如缓冲区),然后通过名称匹配缩小这些对象的集合范围。通常情况下, Icicles 可以在同一命令中以多种但相关的方式对这些对象进行操作。

Helm(Anything)中,一般来说,您的输入首先由对象名称​​匹配所有类型的整个对象世界,然后缩小到选择范围一些操作要执行。

最后,请记住,各种完成方法都为最终用户提供了某些内容(例如命令),为程序员提供了某些内容(例如完成功能)。

如果您正在执行代码完成,那么您通常只想在点处完成名称。代码完成的主要好处是确定适当的候选者是什么。为此,文本(例如代码)上下文通常是非常重要的。为了提供明智的选择,完成功能需要分析上下文(代码),包括任何包含上下文(例如项目代码)。

另一方面,

Minibuffer完成可用于任何类型的选择和操作,包括多项操作的多项选择。在这里,所有部分都很有趣:提供哪些候选人,你可以用它们做什么等等。

Dunno这是否有帮助,但无论如何这都是我的看法。

答案 1 :(得分:7)

我通常使用两个完成包(除了迷你缓冲区和comint缓冲区中的内置TAB完成)。

pabbrev.el - 在光标处提供建议(按 TAB )接受。通过查看单词频率来做出选择。我喜欢这个,因为可以看到完成的内容 - 但它主要只适用于一次完成。

hippie-expand - 通常绑定到 M - / 代替dabbrev,因为它完成了dabbrev所做的所有事情。当您可能需要循环使用某些替代方案,或者如果您想要完成文件名或其他内容时,这种方法很有效。

我喜欢两者,因为它们不需要任何鼠标移动并且工作很快。

答案 2 :(得分:4)

我在迷你缓冲区中使用标准制表符完成文件名,M-x命令和其他内容。

我还经常使用M-/键击(dabbrev-expand)来动态完成任何Emacs缓冲区中的任何单词。这太棒了,特别是对于长变量名称。这是文档:

M-/ runs the command dabbrev-expand, which is an interactive
autoloaded Lisp function in `dabbrev.el'.

It is bound to M-/.

(dabbrev-expand ARG)

Expand previous word "dynamically".

Expands to the most recent, preceding word for which this is a prefix.
If no suitable preceding word is found, words following point are
considered.  If still no suitable word is found, then look in the
buffers accepted by the function pointed out by variable
`dabbrev-friend-buffer-function'.

A positive prefix argument, N, says to take the Nth backward *distinct*
possibility.  A negative argument says search forward.

If the cursor has not moved from the end of the previous expansion and
no argument is given, replace the previously-made expansion
with the next possible expansion not yet tried.

The variable `dabbrev-backward-only' may be used to limit the
direction of search to backward if set non-nil.

See also `dabbrev-abbrev-char-regexp' and C-M-/.

答案 3 :(得分:4)

您可以查看可以使用不同完成源(包括CEDET)的公司模式或自动完成包,它们还允许定义新的完成源... 对于某些编程语言,您可以直接使用CEDET ...