Emacs + clojure.来自项目中所有源文件的自动完成数据

Pav*_*gin 4 emacs autocomplete clojure nrepl

我一直在开发C#应用程序.商业IDE和工具提供了非常好的代码完成功能.我现在正在学习clojure,我真的很想念熟悉的工作流程.

所以,关于emacs.我安装了nrepl,ac-nreplclojure-mode.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)
Run Code Online (Sandbox Code Playgroud)

Leo*_*hin 8

在安装了一个新的nrepl和ac-nrepl后,这就是我放入.emacs的内容

(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)
Run Code Online (Sandbox Code Playgroud)

当我现在nrepl-jack-in进入测试项目并打开它的文件时,我在项目中当前加载的每个命名空间上都有tab-completion.好像你忘记'ac-nrepl-setup'nrepl-interaction-mode-hook.