Vim的 Ctrl + N 通常是这样的:我输入几个字母,点击 Ctrl + N ,和Vim根据我所有打开的缓冲区中的单词为我提供了完成。
Emacs的解决方案不必完全相同。我主要使用它:声明变量,然后在以后的代码中使用它。但我喜欢不解析源代码的轻量级方法。
答案 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)一样好。