2009-01-15 65 views
9

Vim的按Ctrl +ñ一般這樣工作的:我輸入幾個字母,撞按Ctrl +ñ,和Vim提供我根據我在所有打開的緩衝區單詞補全。如何在GNU Emacs中完成Vim的Ctrl-n等價物?

Emacs的解決方案不一定是相同的。我主要像這樣使用它:聲明變量,然後在後面的代碼中使用它。但我喜歡的輕量級方法,而不是解析源代碼的

+0

不錯的提示,不知道Ctrl-n! – 2009-01-15 20:58:23

回答

3

我個人使用AutoComplete它給你一個很好的下拉框。您可以在激活並自定義您想要顯示的內容之前選擇要輸入的字母數,包括dabbrev-expand中的內容。

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) 
13

試嬉皮擴大,勢必會你最喜歡的關鍵

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

而是呈現完成列表,通過就地完井多次擊中束縛關鍵週期。

爲什麼「嬉皮」擴展?我不知道,實際上我避免看這個功能,因爲這個名字沒有信息,並且是令人厭惡的,直到我讀the write-up at 'Life Is Too Short For Bad Code'.EmacsWiki entry on hippie-expand也問「爲什麼'嬉皮?'」,但是也不能回答。)

19

您想要dabbrev-expand,默認綁定到M- /。我沒有使用過Vim,但是從你的描述來看,它完全一樣。

+2

值得注意的是,如果M- /第一次沒有給你想要的東西,反覆按下它將會在比賽中循環。 – Boojum 2009-01-15 21:39:44

+0

這應該是第一個答案,其他替代品排在第二位。 – drozzy 2012-04-09 07:30:00

0

這個問題在我看來是我試過的emacs完成並沒有完成上下文。例如,如果你用方法foobar()和參數foo編寫一些OOP,M- /會建議你foo和foobar。

但是如果你正在調用一個對象方法,而不是僅僅提供「foo」完成,那就太好了。

有沒有人有解決方案?

0

Aif>這比「嬉皮擴展」所提供的要多得多。如果你編寫C/C++,你可以使用ECB http://ecb.sourceforge.net/,但坦率地說,這個項目已經死了,這個插件不是很可靠。如果你需要真正的智能完成,你應該嘗試Eclipse(CDT)。但是如果你編碼Python,那麼Emacs(rope + flymake)就像Eclipse(PyDev)一樣好。