【问题标题】:Emacs + clojure. Autocompletion data from all source files in projectEmacs + clojure。项目中所有源文件的自动完成数据
【发布时间】:2013-08-18 00:31:24
【问题描述】:

我已经开发 C# 应用程序很长时间了。商业 IDE 和工具提供了非常好的代码完成功能。我现在正在学习 clojure,我真的很怀念熟悉的工作流程。

那么,关于 emacs。我已经安装了 nreplac-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)

【问题讨论】:

    标签: emacs autocomplete clojure nrepl


    【解决方案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 模式 苹果酒 编辑 自动完成 自动缩进模式 高亮括号 酸 弹出窗口

    您可能至少需要 ac-cider、cider、clojure-mode、自动完成、自动完成功能的弹出窗口!

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

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

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

    M-x cider-jack-in
    

    那么您必须能够使用 ac-cider 使用自动完成功能。

    【讨论】:

      【解决方案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 进入一个测试项目并打开它的文件时,我对项目中当前加载的每个命名空间都有制表符补全。您好像忘记了'nrepl-interaction-mode-hook 上的'ac-nrepl-setup

      【讨论】:

        【解决方案3】:

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

        我已经开始在 EDE 中支持 Leiningen(CEDET 的项目相关部分) - CEDET 存储库中存在一些代码,或者您可以查看我的 CEDET 存储库 https://github.com/alexott/cedet/tree/devel(我计划将其合并回 CEDET 一些一段时间后)

        【讨论】:

          猜你喜欢
          • 2014-08-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-07-09
          • 1970-01-01
          • 2011-05-04
          • 2010-12-11
          相关资源
          最近更新 更多