emacs - Emacs Lisp模式下的自动完成

Eug*_*ako 23 emacs

最近我发现了M-x ielm(Emacs自我REPL)并且惊喜地发现在该模式下有一个工作制表符完成.说,我可以开始打字ecb-,然后点击TAB,ielm并告诉我ECB公开了哪些功能.非常方便探索!

但是,当我开始编辑我的一个*.el文件时(在Emacs Lisp主模式下),TAB不再作为自动完成工作并执行缩进,我觉得这很不幸.

我试图弄清楚自动完成是如何工作的ielm,以便可能将其移植到Emacs Lisp模式.然而,显然,在ielm使用中自动完成comint-dynamic-complete,据我所知,它只适用于comint基于缓冲区.我想,这意味着我在这里运气不好.

那么,我如何为Emacs Lisp启用自动完成功能呢?

san*_*inc 32

在最新版本的Emacs中,您可以使用一些鲜为人知的内置功能来实现TAB:

(setq tab-always-indent 'complete)
(add-to-list 'completion-styles 'initials t)
Run Code Online (Sandbox Code Playgroud)

使用此设置TAB- 通常绑定indent-for-tab-command- 首先尝试根据模式的设置调整缩进,但如果缩进已经正确,则触发完成.这通常是理想的行为,恕我直言比智能标签等第三方插件效果更好.

但是请注意,在某些模式中,TAB不受约束indent-for-tab-command,因此对于这些模式需要进一步重新绑定,例如smart-tab.此外,当模式具有"弹跳缩进"(例如python-mode)时,该技术也将不起作用.