如何在 Emacs 中正确配置 CIDER 的代码补全?

How to properly configure CIDER's code completion in Emacs?

我已经将 CIDER 安装到我的基本 Emacs 中,当我在 cider-mode(也在 clojure-mode)时,我尝试使用 M-TAB 完成代码我得到

Not an nREPL dict object: %

其中 % 是任意函数。例如,如果我尝试在这一行中为 map 完成代码:

(ma

我在 Messages 缓冲区中看到以下内容:

completion--some: Not an nREPL dict object: map

我在我的 Emacs 中做了一个 tabula rasa,所以我的 init.el 看起来像这样:

(require 'package)

(add-to-list 'package-archives
             '("marmalade" . "http://marmalade-repo.org/packages/") t)
(add-to-list 'package-archives
             '("tromey" . "http://tromey.com/elpa/") t)
(add-to-list 'package-archives
             '("melpa" . "http://melpa.milkbox.net/packages/") t)

(package-initialize)

(when (not package-archive-contents)
  (package-refresh-contents))

(defvar my-packages
  '(paredit
    clojure-mode
    clojure-mode-extra-font-locking
    cider))

(dolist (p my-packages)
  (when (not (package-installed-p p))
    (package-install p)))

我观察到一件有趣的事。当我执行 cider-jack-in 时,我连接到 nREPL 并且在 REPL 缓冲区中我看到以下内容:

WARNING: CIDER's version (0.13.0-snapshot) does not match cider-nrepl's version (nil). Things will break!

我做错了什么?我无法让 CIDER 的代码完成工作。即使使用简单的 M-TAB 选项也无法正常工作。

我正在使用 Emacs 24.3.1。

这正是问题所在:

WARNING: CIDER's version (0.13.0-snapshot) does not match cider-nrepl's version (nil). Things will break!

Cider 由两部分组成,有emacs 包(CIDER) 和clojure 部分cider-nrepl。第二个是使用中间件来 clojure n(etwork)-repl

由于苹果酒的开发进展迅速,因此两个版本必须匹配。 (而且你应该始终使用最新版本,你现在正在做什么:))

您可能想将此添加到您的 project.clj 订单 profiles.clj

:plugins [[cider/cider-nrepl "0.13.0-SNAPSHOT"]]

https://cider.readthedocs.io/en/latest/ 上还有很多文档 在 github 回购 https://github.com/clojure-emacs/cider