2012-03-26 30 views
8

Tôi đang sử dụng tự động hoàn thành và đoạn mã trong Emacs và tôi bị nhầm lẫn bởi cài đặt của chúng. Tôi đặt đoạn mã sau vào .emacs tôi:Giới thiệu về tự động hoàn thành và đoạn mã trong các emacs

(add-to-list 'load-path "~/.emacs.d/plugins/yasnippet") 
(require 'yasnippet) 
(yas/global-mode 1) 
(global-set-key (kbd "C-i") 'yas/expand) 
(setq yas/also-auto-indent-first-line t) 

(add-to-list 'load-path "~/.emacs.d/plugins/autocomplete/") 
(require 'auto-complete-config) 
(add-to-list 'ac-dictionary-directories "~/.emacs.d/plugins/autocomplete/ac-dict") 
(ac-config-default) 
(setq ac-use-menu-map t) 
(define-key ac-menu-map "\C-n" 'ac-next) 
(define-key ac-menu-map "\C-p" 'ac-previous) 

(defun ac-js-mode() 
(setq ac-sources '(ac-source-yasnippet 
       ac-source-symbols 
       ac-source-words-in-buffer 
       ac-source-words-in-same-mode-buffers 
       ac-source-files-in-current-dir 
       ))) 
(add-hook 'js-mode-hook 'ac-js-mode) 

Tôi cố gắng để thiết lập yasnippet là ứng cử viên đầu tiên trong menu sổ popup tự động hoàn tất. Tuy nhiên, như ví dụ dưới đây cho thấy, điều này không hoạt động với cài đặt hiện tại của tôi: khi tôi nhập từ for, formatItem ở vị trí đầu tiên và for trong giây lát. formatItem chỉ là một hàm cục bộ trong bộ đệm hiện tại.

for_____________ 
|formatItem  | 
|for   a| 
|for   s| 
|force   s| 
|foreachv  s| 
---------------- 

Vì vậy, câu hỏi của tôi là: làm thế nào tôi có thể làm cho yasnippet là ứng cử viên đầu tiên tự động hoàn thành? Và có gì thiếu trong cấu hình .emacs của tôi không?

Mọi trợ giúp đều được đánh giá cao.

+0

Tôi không biết câu trả lời, nhưng tự động hoàn chỉnh có một hệ thống học tập được xây dựng trong, do đó bạn thường xuyên hơn chọn một ứng cử viên cho một hoàn thành cao hơn nó sẽ được thời gian tới. Vì vậy, bạn chỉ có thể phải sử dụng nó một lúc và tất cả các đoạn trích được sử dụng thường xuyên của bạn sẽ tự động nổi lên trên cùng. – Tom

Trả lời

5

ac-config-default cài đặt móc để thiết lập mặc định hợp lý ac-sources giá trị. Những móc này (đặc biệt là ac-common-setup) có thể ảnh hưởng đến cài đặt của bạn.

Bạn có thể kiểm tra điều này bằng cách nhìn vào giá trị thực tế của ac-sources (C-h vac-sources) trong một bộ đệm js-mode để xem nếu nó đã được sửa đổi bằng cách so sánh với giá trị tùy chỉnh của bạn.

Nếu đây là trường hợp, tôi thấy hai giải pháp:

  • dừng sử dụng ac-config-default và thể chỉ định tất cả autocomplete cài đặt,
  • mưu móc bị lỗi để đưa ac-source-yasnippet vào đầu ac-sources sau khi nó đã chạy. Giả sử ac-chung-setup được thực sự gây rối, điều này sẽ trông giống như:
(defadvice ac-common-setup (after give-yasnippet-highest-priority activate) 
    (setq ac-sources (delq 'ac-source-yasnippet ac-sources)) 
    (add-to-list 'ac-sources 'ac-source-yasnippet)) 
+0

Cảm ơn bạn đã trả lời. Đó là trường hợp bạn mô tả. Nhưng tôi không hiểu rõ phương pháp 2 ở trên. Bạn có thể cho tôi biết thêm về nó không? – Boris

+0

@Ryan xem chỉnh sửa của tôi. – Francesco

+1

Xin chào, sau khi tôi đặt mã của bạn vào các .emac của tôi, giá trị thực của nguồn ac có vẻ đúng khi Ch v trong kết quả đầu ra của tệp js: Giá trị của nó là (ac-source-yasnippet ac-source-filename ac- nguồn-ký hiệu ac-nguồn-từ-trong-đệm ac-nguồn-từ-trong-cùng-chế độ-bộ đệm ac-source-files-in-current-dir) .Local trong bộ đệm set.js; Nhưng khi tôi gõ từ 'for', menu popup vẫn cung cấp đồ thị mà tôi đưa ra trong câu hỏi. Tôi không có ý tưởng về điều đó. – Boris

Các vấn đề liên quan