10

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

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

4

6 回答 6

20

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

于 2009-01-15T21:33:01.503 回答
13

试试 hippie-expand,绑定到你最喜欢的键

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

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

为什么“嬉皮”-展开?我不知道,实际上我避免查看该函数,因为该名称没有提供信息且令人反感,直到我阅读了“Life Is Too Short For Bad Code”的文章。hippie-expand 上的 EmacsWiki 条目也问“为什么是‘嬉皮士?’”,但也无法回答。)

于 2009-01-15T21:28:15.693 回答
3

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

于 2009-01-16T03:00:07.787 回答
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)
于 2009-01-15T21:00:13.520 回答
0

在我看来,问题是我尝试过的emacs完成在上下文方面没有完成。

例如,如果您使用方法 foobar() 和参数 foo 编写一些 OOP,M-/ 将建议您同时使用 foo 和 foobar。

但是,如果您正在调用对象方法,而不是仅仅提供“foo”完成,那就太好了。

有没有人有解决方案?

于 2009-01-29T12:40:04.073 回答
0

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

于 2009-03-13T22:15:15.900 回答