Emacs 中的代码完成

Code Completion in Emacs

我正在尝试使用 Emacs,因为它似乎比 Notepad++ 好一点。

我正在尝试使用代码完成功能(a.k.a 智能感知),但不知道该怎么做。

首先,我输入 M-x,然后输入 eval-expression,然后在迷你缓冲区中,我想输入

(print (font-family-list))

所以我输入 (print (font-f,然后按 TAB,我得到一个 window,内容为:

Click <mouse-2> on a completion to select it.
In this buffer, type RET to select the completion near point.

Possible completions are:
font-face-attributes
font-family-list

我可以用鼠标点击第二个选项 (font-family-list)。但是我如何 select 仅使用键盘的选项?快捷键是什么?

在这些情况下,通过 TAB 完成。完成将添加任何唯一字符,直到发生冲突(在您的情况下,它添加了字母 "a")。此时您需要键入下一个区分它的字符。如果你键入 mTAB Emacs 将 select font-family-list.

你可以有一个更好的完成系统,但不是在你用 eval-expressionM-: 调用的迷你缓冲区中。

我建议你用 M-x ielm 调用交互式劣质 elisp shell。现在您可以启用 company-mode 的完成,它会带来如下内容:

安装公司,位于melpa:

package-install RET company RET

并在需要时调用它:

M-x company-mode

您会发现它适用于 shell 和其他语言:)

我真的问了同样的问题:

In Emacs, how do I select the completion list with the keyboard?

Completion Commands doc 和上面的答案中,我意识到我需要执行 switch-to-completions 功能。因为 M-v 对我不起作用,所以我最终在迷你缓冲区中绑定 Shift-Tab 以切换到补全 window:

(define-key minibuffer-local-map  (kbd "<S-tab>") 'switch-to-completions)

编辑: M-v(或 Alt-v)在全新安装中为我工作 - 但是自从使用 cua-mode,它停止工作。

我正要安装 minibuffer-complete-cycle 但是当我阅读描述时,它说如果 completion-cycle-threshold 变量设置为一个整数,比如 3,那么如果有 3 或更少的完成选项,然后 TAB 将循环通过它们。我们仍然可以使用M-v

尽管阅读了它的描述,minibuffer-complete-cycle 似乎更精致了。