2

我正在尝试在 Emacs 中使用预测模式来自动完成 LaTeX 文档。按下 TAB 时,我希望它执行以下操作

  • 如果只有一种可能,请完成单词。(这通常不会发生。单词的其余部分以蓝色突出显示,我必须按 [Ctrl]-Enter 才能完成。)

  • 如果有很多替代品,请循环使用。(我不知道如何让它做到这一点。)

4

1 回答 1

3

您需要检查有多少完成候选人,并相应地调用completion-acceptcompletion-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)
于 2013-04-30T02:07:17.603 回答