如何在org-mode中使用TAB键进行自动完成?

8
我已经安装了auto-complete-mode,并且正在使用org-mode。当我按下TAB键自动完成单词时,它会尝试缩进该行。有时它会缩进整个段落,有时则不起作用。
我尝试定制变量(setq tab-always-indent 'complete)并将其更改为nil,但现在当我按下TAB键时,它只是在屏幕上插入制表符空格。
我知道可以成功地使用org-mode与yasnippet和auto-complete同时正常工作,因为在Emacs Live中,它可以直接工作。

1
你尝试过这个吗:(ac-flyspell-workaround) - pippo
3个回答

11

自动完成使用变量ac-modes来决定是否在特定模式下启用自动完成,默认情况下org-mode不在此列表中。因此,要在org-mode中启用自动完成,只需将其添加到ac-modes中,类似于以下内容应该可以工作

(add-to-list 'ac-modes 'org-mode)

同时,要想使用tab键完成操作,您需要将ac-trigger-key设置为tab,如下所示(链接到手册

(ac-set-trigger-key "TAB")

C-h k tab会给出什么?它是否会给出类似于“TAB(从<tab>翻译而来)运行命令ac-trigger-key-command”的内容? - user2053036
Emacs Live:<tab>运行命令yas-expand,它是yasnippet.el'中yas-expand-from-trigger-key'的别名。它绑定到<tab>,<menu-bar> <YASnippet> <Expand trigger>。(yas-expand &optional FIELD)在光标前展开片段。如果无法展开片段,则调用命令`org-cycle'。可选参数FIELD用于非交互式使用,并且是满足`yas--field-p'的对象,以限制扩展范围。 - incandescentman
它正在自动完成。在代码片段包中只定义了少数几个片段,但在Emacs Live org-mode中,TAB键可以自动补全缓冲区中已经出现的任何单词。 - incandescentman
“TAB” 在我的 Emacs-live 中无法自动补全。我查看了 Emacs-live 的自动补全配置,它们似乎没有做任何启用 Tab 补全的操作。只需在您的 init 文件中添加 (setq ac-auto-start 2)(add-to-list 'ac-sources ac-source-words-in-buffer) 尝试一下即可。 - user2053036
1
在我的emacs上,(add-to-list 'ac-modes 'org-mode) 在启动时会导致错误,因为'ac-modes的定义是无效的,所以不能添加到其中。 - Zelphir Kaltstahl
显示剩余8条评论

1
对我来说,解决方案是从melpa-stable安装org-ac。这导致Emacs在光标后显示已完成的单词,就像我已经输入了它一样,但颜色不同。使用Tab接受该完成。
(Emacs:GNU Emacs 24.5.1

0
我找到的唯一稳定的解决方案是在使用org-mode自动完成时禁用flyspell模式M-xflyspell-mode:Emacs 26.1,GTK+ 3.22.30,Org mode版本9.1.14,Spacemacs 0.200.13。建议(add-to-list 'ac-modes 'org-mode)没有起作用,我也无法找到ac-flyspell-workaround。因为对我来说,在org-mode中完成更有价值,所以我经常关闭flyspell模式。

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