Emacs 30.1 引入了 completion-preview-mode
,相比 company
或 corfu
,它所使用的行内补全更加简单,用于比较简单的场景比较方便,比如 Org-mode 的关键字补全。
但是,在 Org-mode 中直接开启 completion-preview-mode
无法生效,Org-mode 使用 org-self-insert-command
取代了 self-insert-command
导致无法触发 completion-preview-mode
。以下帖子的解决方法可用:
(setq-local completion-preview-commands
'(;; self-insert-command
org-self-insert-command
insert-char
;; delete-backward-char
org-delete-backward-char
backward-delete-char-untabify
analyze-text-conversion
completion-preview-complete))

4 个赞
我一般用C-c C--
来插入这些src/quote/example之类的。
1 个赞
默认情况下一下就补全完了,对 #+begin_xxx
不会中途补全到 _
再进行二次选择。
看了下注释随便糊了个支持选择候选项的配置,这个配置只能说能用:
(add-hook
'org-mode-hook
(defun yy/set-completion-preview ()
(completion-preview-mode)
(let ((kmap (make-sparse-keymap)))
(keymap-set kmap "C-i" #'completion-preview-insert)
(keymap-set kmap "M-i" #'completion-preview-complete)
(keymap-set kmap "C-n" #'completion-preview-next-candidate)
(keymap-set kmap "C-p" #'completion-preview-prev-candidate)
(keymap-set kmap "C-f" #'completion-preview-insert-word)
(setq-local completion-preview-active-mode-map kmap))
(setq-local completion-preview-commands
'(;; self-insert-command
org-self-insert-command
insert-char
;; delete-backward-char
org-delete-backward-char
backward-delete-char-untabify
analyze-text-conversion
completion-preview-complete))))
C-f
可以移动到以 word
为单位的分隔,C-n
和 C-p
切换候选词。