如何在Clojure中使用Cider的内置自动完成功能?

时间:2014-04-23 01:55:05

标签: emacs clojure cider

根据this

  

CIDER中的内置完成逻辑依赖于库clojure-complete,因此您必须拥有完成工作的类路径。如果您要连接到从lein启动的nREPL服务器(例如,您调用了M-x cider-jack-in) - 那么您无需做任何事情。

所以 - 我在Emacs 24.3中使用了一个nREPL插孔,所以我猜想“我无需做任何事情”。但是,我没有在我的Clojure源文件中获得任何自动完成功能。

我通过Elpa卸载并重新安装了Cider以确保安全。显然没有必要从我读过的内容中手动安装任何其他自动完成软件包,但我必须承认,自动完成工作似乎是一项非常重要的事情,任何人都可以指出我所缺少的内容吗?

3 个答案:

答案 0 :(得分:1)

这是我的旧配置。我有一段时间没有使用过Clojure,但是 我已经检查过它仍然有效:

(require 'ac-nrepl)
(defun clojure-auto-complete ()
  (interactive)
  (let ((ac-sources
         `(ac-source-nrepl-ns
           ac-source-nrepl-vars
           ac-source-nrepl-ns-classes
           ac-source-nrepl-all-classes
           ac-source-nrepl-java-methods
           ac-source-nrepl-static-methods
           ,@ac-sources)))
    (auto-complete)))

(defun my-clojure-hook ()
  (auto-complete-mode 1)
  (define-key clojure-mode-map
      (kbd "β") 'clojure-auto-complete))

(add-hook 'clojure-mode-hook 'my-clojure-hook)

我很确定我选择了单独的功能而不是修改 ac-sources出于性能原因(我的ac-delay为0.4)。

答案 1 :(得分:1)

确认: 4月23日6:57的回答abo-abo回答。

只需改变" ac-nrepl"进入" ac-cider"当然。

(GNU Emacs 24.3.1(x86_64-pc-linux-gnu,GTK + 3.10.9版)  关于布朗尼的2014-06-06,由Debian修改)

答案 2 :(得分: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))

我的包裹是:

ac-cider
auto-complete
auto-indent
cider
clojure-mode
highlight-parentheses
parendit
popup
rainbow-delimiters

我不想对repl和脚本使用自动完成功能,所以我对它们进行了评论。

你可能不需要它们,但它们都很有用。如果您不想更改init.el文件,最好使用列出的所有软件包。

完成后,使用Lein创建项目,然后添加

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

到project.clj文件。

现在,差不多完成了。 使用Emacs打开源文件,然后运行

M-x cider-jack-in

然后您必须能够为代码使用自动完成功能!