2012-05-28 70 views
3

我從這裏下載了一個emacs配置文件:https://github.com/redguardtoo/emacs.d
我安裝它並學習使用emacs。
當使用YASnippet時,我發現自動完成的鍵綁定不起作用。
在編寫C代碼時,輸​​入「inc」,然後按Tab鍵,emacs彈出一個菜單選擇一個片段。
它只有在按下uparrow和downarrow時才起作用,如果我想選擇一個片段,C-n和C-p不起作用。
我發現emacs配置文件具有綁定C-n和C-p。這裏是init-auto-complete.elemacs自動完成密鑰綁定不起作用

(require 'auto-complete) 
(require 'auto-complete-config) 
(global-auto-complete-mode t) 
(setq ac-auto-start nil) 
(setq ac-dwim nil) ; To get pop-ups with docs even if a word is uniquely completed 
(define-key ac-completing-map (kbd "C-n") 'ac-next) 
(define-key ac-completing-map (kbd "C-p") 'ac-previous) 

;;---------------------------------------------------------------------------- 
;; Use Emacs' built-in TAB completion hooks to trigger AC (Emacs >= 23.2) 
;;---------------------------------------------------------------------------- 
(setq tab-always-indent 'complete) ;; use 'complete when auto-complete is disabled 
(add-to-list 'completion-styles 'initials t) 

;; hook AC into completion-at-point 
(defun set-auto-complete-as-completion-at-point-function() 
    (setq completion-at-point-functions '(auto-complete))) 
(add-hook 'auto-complete-mode-hook 'set-auto-complete-as-completion-at-point-function) 


(set-default 'ac-sources 
      '(ac-source-dictionary 
       ac-source-words-in-buffer 
       ac-source-words-in-same-mode-buffers 
       ac-source-words-in-all-buffer)) 

(dolist (mode '(magit-log-edit-mode log-edit-mode org-mode text-mode haml-mode 
       sass-mode yaml-mode csv-mode espresso-mode haskell-mode 
       html-mode nxml-mode sh-mode smarty-mode clojure-mode 
       lisp-mode textile-mode markdown-mode tuareg-mode 
       js3-mode css-mode less-css-mode)) 
    (add-to-list 'ac-modes mode)) 


;; Exclude very large buffers from dabbrev 
(defun sanityinc/dabbrev-friend-buffer (other-buffer) 
    (< (buffer-size other-buffer) (* 1 1024 1024))) 

(setq dabbrev-friend-buffer-function 'sanityinc/dabbrev-friend-buffer) 


(provide 'init-auto-complete) 

我覺得這兩行應該可以工作,但事實並非如此。這讓我瘋狂。
(定義鍵AC-完成地圖(KBD 「道道通」) 'AC-NEXT)
(定義鍵AC-完成地圖(KBD 「CP」)' AC-以前)

如何我可以綁定Cn和Cp以在彈出菜單中選擇代碼片段嗎?

回答

0
(define-key ac-menu-map (kbd "C-n") 'ac-next) 
(define-key ac-menu-map (kbd "C-p") 'ac-previous) 

怎麼樣,上面的代碼

+0

它不起作用。但是我發現了一些更有用的C-n和C-p。例如當彈出菜單是「-include ...」和「include ..」時,我可以按「 - 」作爲第一個,「i」作爲第二個。問題解決了。謝謝! – user1420991

2

http://www.emacswiki.org/emacs/auto-complete.el

;; Use C-n/C-p to select candidates 
;; -------------------------------- 
;; 
;; Add following code to your .emacs. 
;; 
;;  (define-key ac-complete-mode-map "\C-n" 'ac-next) 
;;  (define-key ac-complete-mode-map "\C-p" 'ac-previous) 

這對我的作品中。