首页 文章

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

提问于
浏览
4

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

所以,关于emacs . 我安装了nrepl,ac-nrepl和clojure-mode . repl中自动完成工作正常 . 它也适用于当前缓冲区中的符号 . 但不适用于:

来自其他项目文件的

  • 符号

  • 外部图书馆(由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)

3 回答

  • 2

    在安装了一个新的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)
    

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

  • 8

    自动完成应该能够从所有打开的clojure文件中完成,但是现在我不能说可以从项目和库中完成 . 这可能是通过Semantic(来自CEDET)来完成的,但是现在还没有针对clojure代码的解析器 .

    我've started work on Leiningen support in EDE (CEDET'与项目相关的部分) - 一些代码存在于CEDET回购中,或者您可以在https://github.com/alexott/cedet/tree/devel查看我的CEDET回购(我计划稍后将其合并回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-mode cider paredit auto-complete auto-indent-mode highlight-parentheses ac-cider popup

    You may need at least ac-cider, cider, clojure-mode, auto-complete, popup for auto-completion feature!

    **安装并设置init.el文件后,使用Lein创建一个Clojure项目 . (它不适用于.clj文件,仅适用于Leiningen项目 . )添加

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

    到project.clj文件然后打开一个源文件并运行:**

    M-x cider-jack-in
    

    然后,您必须能够使用ac-cider使用自动完成功能 .

相关问题