Vim可以使用CTRL-X P
和CTRL-L
来完成单词和行。在Emacs中有一个叫做Company mode的插件,但是这个插件会干扰Emacs中的许多事情(包括全局linum和yasnippets)。我知道在Emacs中可以使用CTRL-/来完成单词,但是是否可以使用之前编写的代码行来完成呢?
Vim可以使用CTRL-X P
和CTRL-L
来完成单词和行。在Emacs中有一个叫做Company mode的插件,但是这个插件会干扰Emacs中的许多事情(包括全局linum和yasnippets)。我知道在Emacs中可以使用CTRL-/来完成单词,但是是否可以使用之前编写的代码行来完成呢?
也许你正在寻找 hippie-expand?从该网页(截至本文撰写时):
HippieExpand查看光标前的单词,并尝试以各种方式扩展它,包括从固定列表(如
expand-abbrev
)扩展,从缓冲区中找到的匹配文本扩展(如dabbrev-expand
),或者通过您自己定义的函数进行扩展。它尝试哪些方法以及以什么顺序进行控制由可配置的函数列表控制。
有关完整的完成选项列表,请访问 Emacs Wiki上的完成页面。
Ctrl-X Ctrl-L
的行为,您需要将try-expand-line-all-buffers
添加到hippie-expand-try-functions-list
中。这将从所有缓冲区而不仅仅是当前缓冲区扩展行。 - ymlnM-5 M- /
将按行完成,而单独使用 M- /
则仍然按照常规方式完成。
hippe-expend
函数具有非常有用的功能,即:hippie-expand-try-functions-list 中自定义扩展函数,并将函数 try-expand-line
放在第五个列表元素中,那么您可以使用 M-5 M-/ 按行完成补全。
这个提示非常方便和有用,我强烈推荐它。
evil
,这是我使用的最像vim的解决方案: (defun my-expand-lines ()
(interactive)
(let ((hippie-expand-try-functions-list
'(try-expand-line-all-buffers)))
(call-interactively 'hippie-expand)))
(define-key evil-insert-state-map (kbd "C-x C-l") 'my-expand-lines)
这样,您就可以在插入模式下使用我们的老朋友C-x C-l
来完成所有缓冲区的整行自动补全。
感谢@ymln建议使用try-expand-line-all-buffers
。