2013-08-15 6 views
4

오랫동안 C# 응용 프로그램을 개발해 왔습니다. 상용 IDE 및 도구는 매우 우수한 코드 완성 기능을 제공합니다. 지금은 clojure를 배우고 익숙한 워크 플로우를 놓치고 있습니다.이맥스 + 클로저. 프로젝트의 모든 소스 파일에서 자동 완성 데이터

그래서 이맥스에 대해. nrepl, ac-nrepl클로저 모드을 설치했습니다. 자동 완성 기능은 repl에서 잘 작동합니다. 또한 현재 버퍼의 심볼에도 적용됩니다. 그러나 아니 : 다른 프로젝트 파일에서

  1. 문자
  2. 외부 라이브러리 (leiningen로 관리).

사례 1과 2를 완전히 포함하고있는 기존 패키지가 있습니까?

내 Clojure의 관련 설정 :

;;;;;;;;;;;;;;; 
;;; clojure ;;; 
;;;;;;;;;;;;;;; 

(require 'nrepl) 

;; Configure nrepl.el 
(setq nrepl-hide-special-buffers t) 
(setq nrepl-popup-stacktraces-in-repl t) 
(setq nrepl-history-file "~/.emacs.d/nrepl-history") 

;; Some default eldoc facilities 
(add-hook 'nrepl-connected-hook 
     (defun pnh-clojure-mode-eldoc-hook() 
     (add-hook 'clojure-mode-hook 'turn-on-eldoc-mode) 
     (add-hook 'nrepl-interaction-mode-hook 'nrepl-turn-on-eldoc-mode) 
     (nrepl-enable-on-existing-clojure-buffers))) 

;; Repl mode hook 
(add-hook 'nrepl-mode-hook 'subword-mode) 

;; Auto completion for NREPL 
(require 'ac-nrepl) 
(eval-after-load "auto-complete" 
    '(add-to-list 'ac-modes 'nrepl-mode)) 

(add-hook 'nrepl-mode-hook 'ac-nrepl-setup) 
(add-hook 'clojure-nrepl-mode-hook 'ac-nrepl-setup) 

(define-key clojure-mode-map (kbd "C-<ret>") 'nrepl-eval-expression-at-point) 

;(global-set-key (kbd "C-<ret>") 'nrepl-eval-expression-at-point) 

;;;;;;;;;;;;;;;;;;;;; 
;;; auto-complete ;;; 
;;;;;;;;;;;;;;;;;;;;; 

(require 'auto-complete-config) 
(add-to-list 'ac-dictionary-directories "~/.emacs.d/ac-dict") 
(setq ac-delay 0.0) 
(setq ac-use-quick-help t) 
(setq ac-quick-help-delay 0.05) 
(setq ac-use-fuzzy 1) 
(setq ac-auto-start 1) 
(setq ac-auto-show-menu 1) 
(ac-config-default) 

(define-key ac-mode-map (kbd "C-SPC") 'auto-complete) 

답변

8

신선한 nrepl 및 AC-nrepl를 설치 한 후, 여기에 내가 이맥스에 넣어 것입니다

(package-initialize) 
(require 'auto-complete) 
(global-auto-complete-mode) 
(add-hook 'nrepl-mode-hook 'ac-nrepl-setup) 
(add-hook 'nrepl-interaction-mode-hook 'ac-nrepl-setup) 
(add-hook 'clojure-nrepl-mode-hook 'ac-nrepl-setup) 

나는 지금 테스트 프로젝트에 nrepl-jack-in 및 그것의 파일을 열 때, 나는이 현재 프로젝트에로드 된 모든 네임 스페이스에서 탭 완성. 'nrepl-interaction-mode-hook에있는 'ac-nrepl-setup을 잊어 버린 것 같습니다.

2

자동 완성 열려있는 모든 Clojure의 파일에서 완료 할 수 있어야하지만 지금 나는이 프로젝트 & 라이브러리에서 완료 할 수 있다고 말할 수 없습니다. 잠재적으로 이것은 시맨틱 (Semantic) (CEDET)을 통해 수행 될 수 있지만, 지금은 거기에 클로저 코드 용 파서가 없습니다.

EDE (CEDET 프로젝트 관련 부분)에서 Leiningen 지원에 대한 작업을 시작했습니다. 일부 코드는 CEDET repo에 있거나 내 CEDET 저장소 (https://github.com/alexott/cedet/tree/devel)에서 볼 수 있습니다 (CEDET에 다시 병합 할 예정입니다. 이상)

1
(require 'auto-complete-config) 
(require 'clojure-mode) 
(require 'cider-mode) 
(require 'ac-cider) 

(ac-config-default) 
;(add-hook 'cider-repl-mode-hook 'ac-cider-setup)                                    
(add-hook 'cider-mode-hook 'ac-cider-setup) 
(eval-after-load "auto-complete" 
    '(add-to-list 'ac-modes 'cider-repl-mode)) 

(add-hook 'clojure-mode-hook 'paredit-mode) 
;(add-hook 'clojurescript-mode-hook 'paredit-mode)                                    
(add-hook 'clojure-mode-hook 'rainbow-delimiters-mode) 
(setq cider-repl-pop-to-buffer-on-connect nil) 

(require 'highlight-parentheses) 
(add-hook 'clojure-mode-hook 
      (lambda() 
      (highlight-parentheses-mode t))) 

(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) 
;(add-hook 'cider-repl-mode-hook 'set-auto-complete-as-completion-at-point-function)                           
(add-hook 'cider-mode-hook 'set-auto-complete-as-completion-at-point-function) 
(eval-after-load "cider" 
    '(define-key cider-mode-map (kbd "C-c C-d") 'ac-cider-popup-doc)) 

이것은 내 init.el 파일입니다. 내 패키지 목록이 포함되어 있습니다 Clojure의 모드 사이다 paredit 자동 완성 자동 들여 쓰기 모드 하이라이트 - 괄호 AC-사이다 팝업

당신은 적어도 AC-사과를해야 할 수도 있습니다, 사이다, 자동 완성 기능을위한 clojure-mode, auto-complete, popup!

** init.el 파일을 설치하고 설정하면 Lein을 사용하여 Clojure 프로젝트를 만듭니다. (그것은 단지 Leiningen 프로젝트 작업, 단지 .clj 파일이 작동하지 않습니다.) 다음 소스 파일을 열고 실행 파일을 project.clj하는

:plugins [[cider/cider-nrepl "0.8.2"]] 

추가 : **

M-x cider-jack-in 

을 다음 ac-cider를 사용하여 자동 완성 기능을 사용할 수 있어야합니다.