如何使带有clojure层的spacemacs自动完成依赖功能

How make spacemacs with clojure layer to complete function in dependency automatic

作为标题,我使用 spacemacs 并添加 clojure 层。 而且我在project.clj中添加了一个依赖,但是它不能自动完成功能。

这是我的一些配置:

dotspacemacs-configuration-layers
'(
 (auto-completion :variables
                  auto-completion-enable-help-tooltip t
                  auto-completion-enable-snippets-in-popup t
                  auto-completion-enable-sort-by-usage t)
 better-defaults
 emacs-lisp
 (git :variables
      git-magit-status-fullscreen t
      git-enable-github-support t
      git-gutter-use-fringe t)
 github
 markdown
 org
 syntax-checking
 version-control
 clojure
 )

当我导入一个依赖时,我不知道它提供了哪些功能,所以我想让emacs帮我自动完成,或者有什么办法可以达到我的目的。

谢谢。

当你 require 一个依赖项给它一个这样的名字时:

(ns example.core
  (:require [com.ok.my-library :as library])
  ... )

然后在您的代码中键入

library/

spacemacs/emacs 将创建该名称空间提供的名称的下拉列表。添加 :as name-here 通常也有助于其他人稍后探索您的代码。

如果您的 emacs 没有填充该列表,那将是一个独立于此列表的问题(两者都需要解决)。

对于对此相当陌生的人来说,这里可能有一些要点需要了解。我会尽力指出它们。 这里的所有内容都适用于大部分未配置的 Spacemacs,其中 clojure 和自动完成层处于活动状态。

切记:

  1. REPL 实际上不是命令行界面,而是您可以与之交互的后台进程 运行ning(例如通过命令行界面)- 该进程具有一些相关的内部状态(当前命名空间, 所需的符号和命名空间,loaded/evaluated 代码)
  2. 与 REPL 更有趣的交互通常不是通过命令行,而是在编辑 Window(意思是 Emacs Window)本身

您可以使用 Cider 评估命令来执行此操作,可通过 Spacemacs 中的 <leader>-m-e 键找到。我所说的主要适用于那种互动方式。

  1. Cider REPL 和自动完成之间的交互在某些方面与 evaluation/ns-loading 有关,而不是与 ns-require

现在开始提问:

  • 当你 cider-jack-in 进入一个新的 REPL 时,没有编辑 Window 或缓冲区的 ns 声明被评估 - 你在 user-ns
  • Cider 上下文中的 autocomplete-layer 似乎只完成了,但也完成了在某些 ns 中声明的所有内容(具有特定的 :as) -声明在某个时候被评估,或者更可能的是,loaded(不需要)
  • 当您 cider-eval-sexp-at-point(例如)在 Window 中时,会评估缓冲区中的名称空间声明,这通常会触发一些要求(虽然不会评估整个缓冲区)

你可能会 运行 遇到问题,因为有一些奇怪的方式来评估 ns-requires,这似乎与某个要求的 ns 是否打开有关在你的 Emacs 中缓冲。我不确定这是正确的解释,但在我看来

  • 如果您在某个缓冲区中打开了 ns-1,则评估 ns-2 :refers 你的 ns-1,只有引用的 ns-form 被评估,而不是 缓冲区
  • 如果您没有打开 :refered ns,则 ns 及其中的所有表格 文件已加载

因此,有时有必要 "manually" 评估您在某些 ns 中引用的所有表单,以便解决需求。您可以使用 cider-evaluate-buffer 或以其他方式加载 ns。