Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Emacs 如何使带有clojure层的SpaceMac自动完成依赖关系中的功能_Emacs_Clojure_Autocomplete_Spacemacs - Fatal编程技术网

Emacs 如何使带有clojure层的SpaceMac自动完成依赖关系中的功能

Emacs 如何使带有clojure层的SpaceMac自动完成依赖关系中的功能,emacs,clojure,autocomplete,spacemacs,Emacs,Clojure,Autocomplete,Spacemacs,作为标题,我使用SpaceMac并添加clojure层。 我在project.clj中添加了一个依赖项,但它不能自动完成函数 以下是我的一些配置: dotspacemacs-configuration-layers '( (auto-completion :variables auto-completion-enable-help-tooltip t auto-completion-enable-snippets-in-p

作为标题,我使用SpaceMac并添加
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帮助我自动完成,或者是否有其他方法来实现我的目标


谢谢。

当您
需要依赖项时,请给它起个这样的名字:

(ns example.core
  (:require [com.ok.my-library :as library])
  ... )
然后在您键入时输入代码

library/
SpaceMac/emacs将创建该名称空间提供的名称下拉列表。在此处添加
:as name
通常也有助于其他人以后探索您的代码


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

对于刚刚接触此列表的人来说,这里可能有一些要点需要了解。我会尽力指出它们。 这里的一切都适用于大多数未配置的SpaceMac,clojure和auto complete图层处于活动状态

请记住:

  • REPL实际上不是命令行接口,而是运行的后台进程,您可以与之交互(例如通过命令行接口)-该进程具有一些相关的内部状态(当前名称空间、所需符号和名称空间、加载/计算的代码)
  • 与REPL更有趣的交互通常不是通过命令行,而是在编辑窗口(意思是Emacs窗口)本身
  • 您可以使用苹果酒评估命令执行此操作,该命令可通过Spacemacs中的键
    -m-e
    找到。我所说的主要适用于这种互动方式

  • 苹果酒REPL和自动完成之间的交互在某些方面更多地与评估/ns-
    load
    ing有关,而不是与ns要求有关
  • 现在回答问题:

    • 当您
      苹果酒插接
      到一个新的REPL中时,不计算任何编辑窗口或缓冲区中的ns声明-您在
      用户
      -ns中
    • 苹果酒上下文中的自动完成层似乎只完成了在某些ns声明中声明(使用特定的
      :as
      )的所有事情,这些事情在某些时候已经过评估,或者更可能是加载的
      (不需要)
    • 当您在窗口中的点
    (例如)处执行苹果酒评估sexp时,将计算缓冲区中的命名空间声明,这通常会触发一些requires(但不会计算整个缓冲区) 您可能会遇到问题,因为在计算
    ns
    -requires时有一些奇怪的方式,这似乎与Emacs中某个缓冲区中是否打开了所需的
    ns
    有关。我不确定这是正确的解释,但在我看来

    • 如果在某个缓冲区中打开了
      ns
      -1,请计算
      ns
      -2
      :reference
      s您的
      ns
      -1,只计算引用的ns表单,不计算 缓冲区
    • 如果未打开
      :请参阅
      已打开的ns,ns及其所有窗体都处于打开状态
      文件已加载

    因此,有时有必要“手动”评估您在某些
    ns
    中引用的所有表单,以便能够解决所需的问题。您可以使用
    cider evaluate buffer
    执行此操作,或者以其他方式加载ns。

    是的,我完全按照您编写的操作,并且没有提供名称下拉列表,因此我不确定问题出在哪里。我认为添加
    自动完成
    clojure
    层应该可以工作。谢谢你的帮助。我意识到我需要将require buy添加到
    cljr add require to ns
    的命令,而不是键入我自己,并且在出现下拉菜单时可以工作。