如何在GNU Emacs中完成相当于Vim的Ctrl-n?

时间:2009-01-15 20:54:13

标签: emacs autocomplete

Vim的 Ctrl + N 通常是这样的:我输入几个字母,点击 Ctrl + N ,和Vim根据我所有打开的缓冲区中的单词为我提供了完成。

Emacs的解决方案不必完全相同。我主要使用它:声明变量,然后在以后的代码中使用它。但我喜欢解析源代码的轻量级方法。

6 个答案:

答案 0 :(得分:19)

你想要dabbrev-expand,默认绑定到M- /。我没有使用过Vim,但从你的描述来看,它完全一样。

答案 1 :(得分:13)

尝试嬉皮 - 扩展,绑定到您最喜欢的密​​钥

(global-set-key (kbd "M-/") 'hippie-expand)

不是呈现完成列表,而是通过就地完成重复击中绑定键循环。

为什么“嬉皮士” - 扩展?我不知道,我实际上避免查看该功能,因为该名称没有信息且令人反感,直到我阅读the write-up at 'Life Is Too Short For Bad Code'.EmacsWiki entry on hippie-expand也问“为什么'嬉皮?'”但是可以'或者回答它。)

答案 2 :(得分:3)

我个人使用AutoComplete它为您提供了一个不错的下拉框。您可以在激活和自定义要显示的内容之前选择要键入的字母数,包括dabbrev-expand中的内容。

答案 3 :(得分:2)

;; Allow tab to autocomplete

 (defun indent-or-expand (arg)
   "Either indent according to mode, or expand the word preceding point."
   (interactive "*P")
   (if (and
        (or (bobp)      (= ?w (char-syntax (char-before))))
        (or (eobp) (not (= ?w (char-syntax (char-after))))))
       (dabbrev-expand arg)
     (tab-to-tab-stop)))

 (defun my-tab-fix ()
   (local-set-key [tab] 'indent-or-expand))

 (add-hook 'as-mode-hook         'my-tab-fix)
 (add-hook 'java-mode-hook       'my-tab-fix)
 (add-hook 'c-mode-hook          'my-tab-fix)
 (add-hook 'sh-mode-hook         'my-tab-fix)
 (add-hook 'emacs-lisp-mode-hook 'my-tab-fix)

答案 4 :(得分:0)

在我看来,问题是我尝试过的emacs完成情况并没有完成。

例如,如果你用方法foobar()和参数foo写一些OOP,M- /会建议你foo和foobar。

但是如果你调用一个对象方法,那就太好了,而不是只提供“foo”完成。

有人有解决方案吗?

答案 5 :(得分:0)

AIF>这需要的不仅仅是“嬉皮士扩展”所能提供的。如果您编写C / C ++代码,您可以使用ECB http://ecb.sourceforge.net/,但坦率地说,该项目已经死了,这个插件不是很可靠。如果你需要非常好的智能完成,你应该尝试Eclipse(CDT)。但是如果你编写python代码,那么Emacs(rope + flymake)和Eclipse(PyDev)一样好。

相关问题