【问题标题】:Indent clojure on Emacs在 Emacs 上缩进 clojure
【发布时间】:2015-10-20 09:18:12
【问题描述】:

我正在尝试将 emacs 设置为对 clojure 代码进行自动缩进。

到现在都没有成功。为此在配置文件中设置的命令是什么?

【问题讨论】:

  • 你尝试了什么?出了什么问题以及如何发生的?
  • 我的 init.el 文件中有(除其他外):(require 'package) (add-to-list 'package-archives '("melpa-stable" . "http://melpa-stable.milkbox.net/packages/") t)。在(defvar my-packagesclojure-mode 下,我认为每个默认缩进都会带来?但如果我正在处理 .clj 文件,它的所有内容仍然没有缩进,所以我应该使用制表符手动设置缩进。
  • 你读过苹果酒说明书吗?它非常强大,事实上,它是 emacs 中 clojure 的默认环境,具有很好的文档。
  • 是的,我已经阅读了它,它的大部分部分也适用于我。但是在自动完成部分,我安装了公司模式,它在文档中说:To make tab complete, without losing the ability to manually indent, you can add this to your config: (global-set-key (kbd "TAB") #'company-indent-or-complete-common) 。所以我将这一行添加到我的 init.el 中,但仍然没有缩进。
  • 那么完整的“tab”和(cider-jack-in)作品都没有出错吗?

标签: emacs clojure cider


【解决方案1】:

这是我认为 Clojure 的“最小”可用 emacs 配置的示例 emacs 配置。我说的最少是因为我不愿意在没有良好的代码完成、跳转到定义、项目感知文件处理等的情况下工作:

来自this example,您可以将其克隆到 ~/.emacs.d:

这只是一个亮点,上下文参见示例项目中的初始化文件,查看项目中的最新版本等。不要只是复制这些

(use-package clojure-mode
  :ensure t
  :config
  (add-hook 'clojure-mode-hook 'yas-minor-mode))

(use-package cider
 :ensure t
 :config (progn (add-hook 'clojure-mode-hook 'cider-mode)
                 (add-hook 'clojure-mode-hook 'cider-turn-on-eldoc-mode)
                 (add-hook 'cider-repl-mode-hook 'subword-mode)
                (setq cider-annotate-completion-candidates t
                       cider-prompt-for-symbol nil)))

;; clojure refactor library
;; https://github.com/clojure-emacs/clj-refactor.el
(use-package clj-refactor
  :ensure t
  :config (progn (setq cljr-suppress-middleware-warnings t)
                 (add-hook 'clojure-mode-hook (lambda ()
                        (clj-refactor-mode 1)
                        (cljr-add-keybindings-with-prefix "C-c C-m")))))

还有一些代码要添加到 ~/.lein/profiles.clj:

{:user {:plugins [[cider/cider-nrepl "0.10.0-SNAPSHOT"]
                 [refactor-nrepl "1.1.0"]]
        :dependencies [[acyclic/squiggly-clojure "0.1.3-SNAPSHOT"]]}}

【讨论】:

  • 我实际上有一个设置,我可以很好地工作,除了没有激活缩进,我有 paredit、苹果酒、eldoc、公司、弹丸作为次要模式和 clojure 模式,但我在谷歌中找不到任何关于启用自动缩进的命令包。我知道有一些手动缩进的方法,Cx Tab 等,但是每次都这样做很麻烦!
  • 作为一个测试:如果你把这个配置代替你的,自动完成是否有效?然后把它的一半就位并再次测试......平分。这可能会导致打破它的差异。如果即使使用此配置缩进也不起作用,那将是另一个线索。
  • 我试过了,不行。不是说自动缩进实际上包含在clojure-mode中吗?
  • 我还在我的 init.el 中添加了像 (put-clojure-indent '-> 1) 这样的测试:github.com/clojure-emacs/clojure-mode,仍然没有缩进
  • 是的,缩进默认包含在 clojure-mode 中,让我们深入研究事物的输入端,也许 tab 键没有以正确的形式进入 emacs。如果您在一些代码周围放置标记并指向,并运行 M-x indent-region 并且它都跳转到正确的缩进然后开始尝试找出当按下制表键时实际调用的函数 M-x describe-key TAB 并看到它正在调用一个合理的函数。
【解决方案2】:

我加了

(global-set-key (kbd "RET") 'newline-and-indent)

init 文件,这有效。我不确定这是否是最好的解决方案,但它成功了。

【讨论】:

  • 该键通常与 Ctrl-j 绑定,其中 enter 是非缩进版本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-15
相关资源
最近更新 更多