2012-11-13 28 views
5

मैं yasnippet को auto-complete के बैकएंड के रूप में बनाना चाहता हूं। हालांकि, यह काम नहीं करता है। auto-complete-yasnippet.el मिलता है, .emacs इस तरह में कुछ elisp जोड़ें:: क्या मैं इंटरनेट की खोज के बाद करते हैं इस प्रकार हैyasnippet को स्वत: पूर्ण बैकएंड के रूप में कैसे बनाया जाए?

(add-to-list 'load-path 
    "~/.emacs.d/plugins/yasnippet") 
(require 'yasnippet) 
(yas-global-mode 1) 
(yas-minor-mode nil) 
(global-set-key (kbd "M-/") 'yas/expand) 

;; Auto-complete settings 
;; this is the code for the auto-complete 
(require 'auto-complete-config) 
(add-to-list 'ac-dictionary-directories "~/.emacs.d//ac-dict") 
(ac-config-default) 

;;setup for auto-complete-yasnippet 
(require 'auto-complete-yasnippet) 
(setq-default ac-sources 
     '(
     ;; ac-source-semantic 
     ac-source-yasnippet 
     ac-source-abbrev 
     ac-source-words-in-buffer 
     ac-source-words-in-all-buffer 
     ;; ac-source-imenu 
     ac-source-files-in-current-dir 
     ac-source-filename 
     ) 
    ) 

मैं चौधरी वी साथ में * खरोंच * ac-sources में सामग्री को देखो, और इसमें ac-source-yasnippet है। कोई said कि संस्करण के साथ कुछ गलत हो सकता है और auto-complete के उन्नयन के साथ-साथ yasnippet भी हो सकता है। इसका समाधान कैसे किया जा सकता है? मेरा emacs संस्करण 23.3.1 मेरा auto-complete संस्करण 1.3.1 है और मेरा yasnippet संस्करण 0.8.0 (बीटा) है जो कि github से डाउनलोड किया गया है। कोई मदद?

+0

मैं विंडोज 7 के तहत Emacs उपयोग कर रहा हूँ, और 'एम /' की बाइंडिंग कि मैं परिभाषित 'बनाने के लिए किया जाता है yasnippet' विरोध में नहीं हैं:

मैं yasnippet और auto-complete इस तरह पुन: कॉन्फ़िगर कुंजी टीएबी toolchainX

उत्तर

1

आप इसे (require 'auto-complete-yasnippet)

द्वारा आसानी से कर सकते हैं और फिर आप अपने स्वत: पूर्ण की तरह इस प्रकार बदल सकते हैं:

(defun my-ac-config() 
    (setq-default ac-sources '(ac-source-abbrev ac-source-dictionary ac-source-words-in-same-mode-buffers)) 
    (add-hook 'emacs-lisp-mode-hook 'ac-emacs-lisp-mode-setup) 
    ;; (add-hook 'c-mode-common-hook 'ac-cc-mode-setup) 
    (add-hook 'ruby-mode-hook 'ac-ruby-mode-setup) 
    (add-hook 'css-mode-hook 'ac-css-mode-setup) 
    (add-hook 'auto-complete-mode-hook 'ac-common-setup) 
    (add-hook 'octave-mode-hook 'ac-octave-mode-setup) 
    (global-auto-complete-mode t)) 
(defun my-ac-cc-mode-setup() 
    (setq ac-sources (append '(ac-source-clang ac-source-yasnippet) ac-sources))) 
(add-hook 'c-mode-common-hook 'my-ac-cc-mode-setup) 
;; ac-source-gtags 
(my-ac-config) 

यह मेरी मशीन पर ठीक काम करता है।

+0

का उपयोग करते समय 'ऑटो-पूर्ण' के साथ मुझे लगता है कि यह 'यास्निपेट' संस्करण की समस्या हो सकती है, मेरा जवाब नीचे की ओर देखें। – toolchainX

2
वहाँ शायद

कुछ जब auto-complete-1.3.1 संस्करण में ac-yasnippet-candidates प्राप्त auto-complete-config.el के साथ गलत:

(defun ac-yasnippet-candidates() 
    (with-no-warnings 
(if (fboundp 'yas/get-snippet-tables) 
    ;; >0.6.0 
    (apply 'append (mapcar 'ac-yasnippet-candidate-1 (yas/get-snippet-tables major-mode))) 
    (let ((table 
    (if (fboundp 'yas/snippet-table) 
     ;; <0.6.0 
     (yas/snippet-table major-mode) 
     ;; 0.6.0 
     (yas/current-snippet-table)))) 
    (if table 
    (ac-yasnippet-candidate-1 table)))))) 

कुछ हद तक ऊपर कोड स्निपेट yasnippet-0.8.0 संस्करण के साथ संगत होना करने के लिए परिवर्तित किया जाना चाहिए। मैं github से auto-complete-1.4.0 का नवीनतम संस्करण डाउनलोड करता हूं और इसने समस्या को yasnippet के संस्करण का न्याय करने और तदनुसार उपाय करने का हल किया। इस तरह:

(defun ac-yasnippet-candidates() 
    (with-no-warnings 
(cond (;; 0.8 onwards 
     (fboundp 'yas-active-keys) 
     (all-completions ac-prefix (yas-active-keys))) 
     (;; >0.6.0 
     (fboundp 'yas/get-snippet-tables) 
     (apply 'append (mapcar 'ac-yasnippet-candidate-1 
        (condition-case nil 
        (yas/get-snippet-tables major-mode) 
       (wrong-number-of-arguments 
       (yas/get-snippet-tables))))) 
     ) 
     (t 
     (let ((table 
      (if (fboundp 'yas/snippet-table) 
      ;; <0.6.0 
      (yas/snippet-table major-mode) 
     ;; 0.6.0 
     (yas/current-snippet-table)))) 
    (if table 
     (ac-yasnippet-candidate-1 table))))))) 

मैं auto-complete-1.4.0 संस्करण से auto-complete-config.el की नकल की, बाइट यह संकलित, और auto-complete-1.3.1 संस्करण में एक ही फ़ाइलें (दोनों auto-complete-config.el और auto-complete-config.elc) को बदल दिया। यह अभी काम किया! मुझे लगता है कि auto-complete की कॉन्फ़िगरेशन फ़ाइल को डिस्ट्रो में शामिल नहीं किया जाना चाहिए और शायद इसे अपने बैकएंड के साथ संगत बनाना आसान बनाने के लिए अलग से बनाए रखा जाना चाहिए।

;; setup for yasnippet 
(add-to-list 'load-path 
     "~/.emacs.d/plugins/yasnippet") 
;; Extension and configuration of yasnippet. 
(require 'yasnippet-config) 
;; If you use yasnippet from 'auto-complete', add 
(yas/set-ac-modes) 
(yas/enable-emacs-lisp-paren-hack) 
;; before 'auto-complete' settings. 
;; Auto-complete settings 
;; this is the code for the auto-complete 
(require 'auto-complete-config) 
(add-to-list 'ac-dictionary-directories "~/.emacs.d//ac-dict") 
(ac-config-default)