如何让Emacs的completing-read在输入时立即显示*Completions*缓冲区
解决completing-read不显示补全选项的问题
问题根源
你的代码语法本身没有问题,不显示补全列表是因为Emacs默认的补全触发逻辑或配置导致的,并非代码逻辑错误。
快速解决方式
1. 手动触发补全
在输入提示界面,按下TAB键即可立刻显示所有可选补全项;输入部分字符(比如"F")后按TAB,会自动过滤出匹配的选项(比如"First")。
2. 配置自动补全
如果想要输入时自动弹出补全列表,把以下配置添加到你的Emacs配置文件(如~/.emacs或~/.emacs.d/init.el)中,重启Emacs后生效:
;; 设置补全样式为flex,支持模糊匹配 (setq completion-styles '(flex)) ;; 开启输入时自动更新补全列表 (setq completions-auto-update t) ;; 指定补全函数,确保使用能显示列表的实现 (setq completion-in-region-function #'completion--in-region)
验证效果
配置完成后,运行你的原函数:
(defun reader () (interactive) (let ((choices '("First" "Second" "Third"))) (completing-read "Choose: " choices)))
调用M-x reader,输入"F"就会自动弹出匹配的"First"选项,无需手动按TAB触发。
内容的提问来源于stack exchange,提问作者RubyNoob
相关产品推荐
相关产品推荐

