【问题标题】:How make spacemacs with clojure layer to complete function in dependency automatic如何使带有clojure层的spacemacs自动完成依赖功能
【发布时间】:2018-12-11 03:05:33
【问题描述】:

作为标题,我使用 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帮我完成自动化,或者有什么其他方法可以实现我的目标。

谢谢。

【问题讨论】:

    标签: emacs clojure autocomplete spacemacs


    【解决方案1】:

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

    记住:

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

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

    1. Cider REPL 和 Autocomplete 之间的交互在某些方面与评估/ns-loading 的关系比与 ns-require 的关系更大

    现在是问题:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      然后在你的代码中输入

      library/
      

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

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

      【讨论】:

      • 是的,我完全按照你写的那样做,而且没有提供的名称下拉列表,所以我不确定是什么问题。我认为应该添加auto-completionclojure 层。
      • 感谢您的帮助。我意识到我需要添加 cljr-add-require-to-ns 的命令而不是自己输入命令,然后出现下拉菜单。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-30
      • 2022-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-05
      相关资源
      最近更新 更多