我正在尝试在 Emacs 中使用预测模式来自动完成 LaTeX 文档。按下 TAB 时,我希望它执行以下操作
如果只有一种可能,请完成单词。(这通常不会发生。单词的其余部分以蓝色突出显示,我必须按 [Ctrl]-Enter 才能完成。)
如果有很多替代品,请循环使用。(我不知道如何让它做到这一点。)
我正在尝试在 Emacs 中使用预测模式来自动完成 LaTeX 文档。按下 TAB 时,我希望它执行以下操作
如果只有一种可能,请完成单词。(这通常不会发生。单词的其余部分以蓝色突出显示,我必须按 [Ctrl]-Enter 才能完成。)
如果有很多替代品,请循环使用。(我不知道如何让它做到这一点。)
您需要检查有多少完成候选人,并相应地调用completion-accept
或completion-cycle
。
以下应该可以解决问题:
(defun completion-accept-or-cycle (&optional n)
"Accept current completion if there's only one possible candidate.
Otherwise, cycle the completion candidates. A numerical prefix argument
N specifies the number of candidates to cycle forwards (or backwards if
N is negative)."
(interactive)
(let ((overlay (completion-ui-overlay-at-point)))
(when overlay
(if (= (length (overlay-get overlay 'completions)) 1)
(completion-accept)
(completion-cycle n)))))
现在将 TAB 绑定到.emacs 中键盘映射中的这个新completion-accept-or-cycle
命令:completion-overlay-map
(define-key completion-overlay-map "\t" 'completion-accept-or-cycle)