在Emacs中的代码自动完成功能

3
我想试用Emacs,因为它比Notepad++好用一些。
我正在尝试使用代码补全功能(即智能提示),但不知道如何操作。
首先,我输入 M-x,然后输入 eval-expression,在迷你缓冲区中,我想输入: (print (font-family-list)) 所以我输入 (print (font-f 然后按下 TAB,我会得到一个窗口,里面包含以下内容:
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)。但如果只用键盘,我该如何选择该选项?有什么快捷键吗?


2
只需输入区分可能性的字符,例如在这种情况下是 m - choroba
你可以使用 M-: 代替 M-x eval-expression - Drew
3个回答

2
在这些情况下,我们可以通过 TAB 键来完成输入。自动补全会添加任何唯一的字符,直到发生碰撞(例如,在您的情况下,它添加了字母 "a")。此时,您需要键入下一个区分字符的字符。如果您键入mTAB,Emacs将选择 font-family-list

2
您可以拥有更好的完成系统,但不能在您使用eval-expressionM-:调用的迷你缓冲区中实现。
我建议您使用M-x ielm调用交互式inferior elisp shell。现在您可以启用company-mode的完成功能,它会带来类似于以下内容的东西: company-mode completion in shell-mode 安装company,它在melpa中可用:
package-install RET company RET

并在需要时调用:

M-x company-mode

你会注意到它可以在shell和其他语言中使用 :)


你好,谢谢建议。但是在org-mode中使用一个迷你缓冲区下拉列表会更好。仍在寻找解决方案。如果找到了什么,我会改变我的答案。 - Tahir Hassan

0

我实际上问的是同样的问题:

在Emacs中,如何使用键盘选择完成列表?

Completion Commands doc和上面的答案中,我意识到我需要执行switch-to-completions函数。因为M-v对我不起作用,所以我最终将Shift-Tab绑定到了在minibuffer中切换到完成窗口:

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

编辑: M-v(或者Alt-v)对于我在新安装的Emacs上可行 - 但是自从使用之后,它就无法工作了。

我本来打算安装minibuffer-complete-cycle,但是当我阅读描述时,发现如果将completion-cycle-threshold变量设置为一个整数,比如3,那么如果有3个或更少的完成选项,则将循环遍历它们。我们仍然可以与M-v一起使用。

虽然阅读其描述,minibuffer-complete-cycle似乎更加精细。


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