【发布时间】:2010-10-01 16:43:11
【问题描述】:
Vim 的 Ctrl+N 一般是这样工作的:我输入几个字母,点击 Ctrl+N, Vim 会根据我所有打开的缓冲区中的单词为我提供补全。
Emacs 的解决方案不必完全相同。我主要是这样使用它:声明变量,然后在以后的代码中使用它。但我喜欢不解析源代码的轻量级方法。
【问题讨论】:
-
不错的提示,不知道 Ctrl-n!
标签: emacs autocomplete
Vim 的 Ctrl+N 一般是这样工作的:我输入几个字母,点击 Ctrl+N, Vim 会根据我所有打开的缓冲区中的单词为我提供补全。
Emacs 的解决方案不必完全相同。我主要是这样使用它:声明变量,然后在以后的代码中使用它。但我喜欢不解析源代码的轻量级方法。
【问题讨论】:
标签: emacs autocomplete
你想要 dabbrev-expand,默认绑定到 M-/。我没有用过 Vim,但从你的描述来看,它的作用完全一样。
【讨论】:
尝试 hippie-expand,绑定到您最喜欢的键
(global-set-key (kbd "M-/") 'hippie-expand)
不是显示完成列表,而是通过就地完成重复点击绑定键循环。
为什么“嬉皮”-展开?我不知道,实际上我避免查看该函数,因为该名称没有提供信息且令人反感,直到我读到the write-up at 'Life Is Too Short For Bad Code'.(EmacsWiki entry on hippie-expand 还问“为什么是'嬉皮士?'”但无法回答,要么。)
【讨论】:
我个人使用AutoComplete 它为您提供了一个不错的下拉框。您可以选择在激活之前要输入多少个字母,并自定义要显示的内容,包括 dabbrev-expand 中的内容。
【讨论】:
;; 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)
【讨论】:
在我看来,问题是我尝试的 emacs 补全在上下文方面没有完成。
例如,如果您使用方法 foobar() 和参数 foo 编写一些 OOP,M-/ 会建议您同时使用 foo 和 foobar。
但是如果你调用一个对象方法会很棒,而不是仅仅提供“foo”完成。
有人有解决办法吗?
【讨论】:
Aif> 这需要的远不止“嬉皮士扩展”所能提供的。如果你编写 C/C++ 代码,你可以使用 ECB http://ecb.sourceforge.net/,但坦率地说,这个项目已经死了,而且这个插件不是很可靠。如果您需要非常好的智能补全,您应该尝试 Eclipse (CDT)。但是如果你编写 python 代码,那么 Emacs (rope + flymake) 和 Eclipse (PyDev) 一样好。
【讨论】: