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

时间:2018-07-02 21:07:56

标签: emacs clojure autocomplete spacemacs

作为标题,我使用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帮助我自动完成,或者还有其他途径可以实现我的目标。

谢谢。

2 个答案:

答案 0 :(得分:1)

对于刚接触此知识的人来说,可能需要意识到一些重要的观点。我会尝试指出它们。 这里的所有内容都适用于大多数未配置的Spacemacs,其中Clojure和自动完成图层处于活动状态。

请记住:

  1. REPL实际上不是命令行界面,而是您可以与之交互的正在运行的后台进程(例如,通过命令行界面)-该进程具有一些相关的内部状态(当前名称空间,必需的符号和名称空间,已加载) /已评估的代码)
  2. 与REPL进行更有趣的交互通常不是通过命令行,而是在Editing Window(意思是Emacs窗口)本身中

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

  1. Cider REPL和自动完成功能之间的交互在某些方面与ns / require相比,与ns-load的处理更多

现在是一个问题:

  • 当您cider-jack-in进入新的REPL时,将评估没有“编辑窗口”或“缓冲区”中的ns-声明-您位于user-ns
  • 在苹果酒的上下文中,
  • 自动完成层似乎只完成了,而且也完成了所有在某些ns声明中声明(带有特定的:as)的东西。进行了一段时间的评估,或者更可能是loaded(不需要)
  • (例如)在窗口中cider-eval-sexp-at-point时,将评估缓冲区中的名称空间声明,这通常会触发一些需求(尽管不会评估整个缓冲区)

您可能会遇到问题,因为评估ns-requires的方法有些怪异,这似乎与Emacs的某些Buffer中是否打开了所需的ns有关。我不确定这是正确的解释,但在我看来

  • 如果您在某个缓冲区中打开了ns-1,则评估ns-2 :refer是您的ns-1,仅评估引用的ns-form,而不会评估 缓冲
  • 如果您没有打开:refer ed ns,则ns及其中的所有形式 文件已加载

因此,有时有必要“手动”评估您在ns中引用的所有表格,以便可以解决要求。您可以使用cider-evaluate-buffer进行此操作,或以其他方式加载ns。

答案 1 :(得分:0)

当您require依赖项时,请给它一个这样的名称:

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

然后在您输入的代码中输入

library/

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

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