2

据此:_

CIDER 中的内置完成逻辑依赖于库 clojure-complete,因此您必须将其作为您的类路径才能完成工作。如果您连接到从 lein 开始的 nREPL 服务器(例如,您调用了 Mx cider-jack-in) - 您无需执行任何操作。

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

为了安全起见,我通过 Elpa 卸载并重新安装了 Cider。显然没有必要从我读过的内容中手动安装任何其他自动完成包,但我必须承认让自动完成工作似乎是一项艰巨的任务,谁能指出我错过了什么?

4

3 回答 3

1

Confirmation: abo-abo answer of Apr 23 at 6:57 works.

Just change "ac-nrepl" into "ac-cider" of course.

(GNU Emacs 24.3.1 (x86_64-pc-linux-gnu, GTK+ Version 3.10.9) of 2014-06-06 on brownie, modified by Debian)

于 2014-12-15T12:22:03.147 回答
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-delay0.4)。

于 2014-04-23T06:57:19.123 回答
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 和 script 使用自动完成功能,所以我评论了它们。

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

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

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

到 project.clj 文件。

现在,它几乎完成了。用 Emacs 打开一个源文件,然后运行

M-x cider-jack-in

那么你必须能够对代码使用自动完成功能!

于 2015-01-31T07:27:32.293 回答