我正在使用自动完成模式。它在许多主要模式下都能正常工作。但我不喜欢使用TAB来选择候选人。
用户手册有这个lisp示例行,用于使用RET选择完成:
(define-key ac-mode-map (kbd "RET") 'auto-complete)
这非常适合完成。
但是,现在我可以使用RET选择候选项,我不能再使用RET来插入换行符了。
可以同时做到吗?
理想情况下,我想使用RET从完成列表中选择候选项,但是当没有列表时,我想正常使用RET - 插入换行符。
我该怎么做?
答案 0 :(得分:1)
你不能简单地重新映射RET键,因为正如你所说,你失去了默认行为。你必须建立一个函数,检查你是否在一个单词的末尾进行自动完成,否则做正常的事情:
(defun complete-or-newline (arg)
(if (and
(or (bobp) (= ?w (char-syntax (char-before))))
(or (eobp) (not (= ?w (char-syntax (char-after))))))
(auto-complete)
(newline-and-indent)))
此代码段是此post的修改。
然后你将重新映射RET以使用该函数:
(define-key ac-mode-map (kbd "RET") 'complete-or-newline)
此解决方案有两个缺点:
您无法将参数传递给auto-complete
。这可以使用interactive
完成,但我不确切知道它是如何工作的。
如果在一行的末尾按RET,它将尝试运行auto-complete
而不是插入新行。你不得不改善病情,虽然我不知道如何。