Emacs是否有字和行完成(如Vim的插入模式完成)?

时间:2010-01-19 18:58:15

标签: emacs autocomplete

Vim使用CTRL-X PCTRL-L.完成单词和行。有一个名为公司模式的Emacs插件,但此插件会干扰并导致与Emacs中的许多内容冲突(使用全局linum和yasnippets)。我知道我可以在Emacs中使用CTRL- /来完成单词。但是可以采用以前写过的行来完成代码吗?

5 个答案:

答案 0 :(得分:7)

也许您正在寻找hippie-expand?从该网页(截至本文撰写,无论如何):

  

HippieExpand之前看过这个词   指向并尝试将其展开   各种方式,包括扩展   固定列表(如expand-abbrev),   从匹配的文本中扩展   缓冲区(如dabbrev-expand)或   以您自己定义的方式扩展   功能。其中的哪一个尝试和   以什么顺序由a控制   可配置的功能列表。

有关完成选项的完整列表,请访问emacs wiki page on completion

答案 1 :(得分:3)

在Emacs中有很多方法可以完成。一些是特定于模式的,一些是内联的,一些是可配置的,哪些不是。 Here是可能对您有所帮助的模式列表。

答案 2 :(得分:2)

使用数字参数逐行完成,说M-5 M-/将按行完成,而M-/单独仍然按正常方式完成。

hippe-expend函数有一个非常有用的功能:

With a positive numeric argument, jumps directly to the ARG next function in this list. With a negative argument or just C-u, undoes the expansion.

自定义hippie-expand-try-functions-list中的扩展函数并将函数try-expand-line作为第5个列表元素,然后您可以使用M-5 M- /按行完成。

这个技巧非常方便实用,我强烈推荐它。

答案 3 :(得分:1)

另外值得注意的是:如果您的窗口管理器没有窃取Alt-tab,则emacs将使用Alt-tab自动完成(我将窗口管理器设置为使用“windows key”而不是alt,因为这个原因)。

答案 4 :(得分:0)

如果您使用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的建议。