【问题标题】:Emacs + Cider (Clojure) + Auto-Complete: How to get the docstring?Emacs + Cider (Clojure) + 自动完成:如何获取文档字符串?
【发布时间】:2014-07-09 02:37:51
【问题描述】:

我正在尝试正确配置 emacs 以编写我的 Clojure 代码。我的 Emacs 配置基于此 good blog post

但是,我确实更改了一些设置,例如他使用的主题等。我一直在检查以获取自动完成(Eldoc?我不确定)以显示 Clojure 中函数的文档字符串,以及我自己的代码。

我想查看该屏幕截图中的文档:

但是,我无法显示“黄色”文档框。我不确定这是由于我的 .emacs 文件中的错误配置,还是我必须使用的命令或...

这是我的.emacs 文件:

(add-to-list 'custom-theme-load-path "~/.emacs.d/lib/noctilux-theme")

(require 'package):
  (add-to-list 'package-archives
    '("marmalade" . "http://marmalade-repo.org/packages/")
    '("melpa" . "http://melpa.milkbox.net/packages/"))

;; Initialize all the ELPA packages (what is installed using the packages commands)    
(package-initialize)  

;; Set bigger fonts
(set-default-font "Courier New-13")  

;; Setup to have a french keyboard layout working   
(require 'iso-transl)  

;; Show parenthesis mode
(show-paren-mode 1)  

;; rainbow delimiters
(global-rainbow-delimiters-mode)

;; paredit
(add-hook 'clojure-mode-hook 'paredit-mode)
(add-hook 'nrepl-mode-hook 'paredit-mode)
(global-set-key [f7] 'paredit-mode)

;; theme
(load-theme 'noctilux t)

;; clojure-mode
(global-set-key [f9] 'cider-jack-in)
(add-hook 'clojure-mode-hook 'turn-on-eldoc-mode)

;; nrepl
(add-hook 'nrepl-interaction-mode-hook 'nrepl-turn-on-eldoc-mode)
(setq nrepl-popup-stacktraces nil)
(add-to-list 'same-window-buffer-names "*nrepl*")
(add-hook 'nrepl-mode-hook 'paredit-mode)

;; Auto complete
(require 'auto-complete-config)
;(add-to-list 'ac-dictionary-directories "~/.emacs.d/ac-dict")
(setq ac-delay 0.0)
;(setq ac-use-quick-help t)
(setq ac-quick-help-delay 0.0)
;(setq ac-use-fuzzy 1)
;(setq ac-auto-start 1)
;(setq ac-auto-show-menu 1)
(ac-config-default)

;; ac-nrepl
(require 'ac-nrepl)
(add-hook 'nrepl-mode-hook 'ac-nrepl-setup)
(add-hook 'nrepl-interaction-mode-hook 'ac-nrepl-setup)
(eval-after-load "auto-complete" '(add-to-list 'ac-modes 'nrepl-mode))


(defun set-auto-complete-as-completion-at-point-function ()
  (setq completion-at-point-functions '(auto-complete)))
(add-hook 'auto-complete-mode-hook 'set-auto-complete-as-completion-at-point-function)

(add-hook 'cider-repl-mode-hook 'set-auto-complete-as-completion-at-point-function)
(add-hook 'cider-mode-hook 'set-auto-complete-as-completion-at-point-function)


;; scroll one line at a time (less "jumpy" than defaults)

(setq mouse-wheel-scroll-amount '(1 ((shift) . 1))) ;; one line at a time

(setq mouse-wheel-progressive-speed nil) ;; don't accelerate scrolling

(setq mouse-wheel-follow-mouse 't) ;; scroll window under mouse

(setq scroll-step 1) ;; keyboard scroll one line at a time

根据@syohex 的评论更新

这是我在 CLJ 缓冲区中看到的内容:

在 NREPL 中,我确实看到了“v”而不是“d”(顺便问一下,这些字母是什么意思?)。正如我在评论中所说,在 NREPL 中,我确实看到黄色框出现,然后当弹出窗口出现时,文档黄色框消失。在 CLJ 代码缓冲区中,黄色框永远不会打开。

最终更新

经过更多测试,一切都按预期工作。当弹出窗口首次显示时,黄色框消失。但是,当我开始选择不同的选项时,它会重新出现在正确的位置。

此外,它开始在 CLJ 缓冲区中工作,我看到上面的截图中看到的字母“v”而不是“d”。可能我忘记启动 NREPL,得重新测试。

无论如何,一切都按预期进行。

【问题讨论】:

  • 相当晚了,但既然我在这里并且想知道同样的事情:by the way, what does these letters means? 这里是源代码中的defined
  • 作为对未来旅行者的提醒,CIDER 现在建议使用 company 进行自动补全

标签: emacs autocomplete clojure cider


【解决方案1】:

nrepl-mode-hooknrepl-interaction-mode-hooknrepl-mode 已过时。您应该分别使用cider-mode-hookcider-repl-mode-hookcider-mode 而不是它们。

并且您应该将ac-quick-help-delay 设置为大于0(例如0.5)的值。 补丁如下。

--- nconf-orig.el   2014-05-21 16:51:40.056185465 +0900
+++ conf-new.el 2014-05-21 16:53:11.936182181 +0900
@@ -43,7 +43,7 @@
 ;(add-to-list 'ac-dictionary-directories "~/.emacs.d/ac-dict")
 (setq ac-delay 0.0)
 ;(setq ac-use-quick-help t)
-(setq ac-quick-help-delay 0.0)
+(setq ac-quick-help-delay 0.5)
 ;(setq ac-use-fuzzy 1)
 ;(setq ac-auto-start 1)
 ;(setq ac-auto-show-menu 1)
@@ -51,9 +51,10 @@

 ;; ac-nrepl
 (require 'ac-nrepl)
-(add-hook 'nrepl-mode-hook 'ac-nrepl-setup)
-(add-hook 'nrepl-interaction-mode-hook 'ac-nrepl-setup)
-(eval-after-load "auto-complete" '(add-to-list 'ac-modes 'nrepl-mode))
+(add-hook 'cider-mode-hook 'ac-nrepl-setup)
+(add-hook 'cider-repl-mode-hook 'ac-nrepl-setup)
+(add-to-list 'ac-modes 'cider-mode)
+(add-to-list 'ac-modes 'cider-repl-mode)


 (defun set-auto-complete-as-completion-at-point-function ()

【讨论】:

  • 谢谢@syohex!这是一个明显的改进,但仍不是 100% 完美。从 REPL 中,我现在看到黄色框,但行为是:首先出现黄色框,然后当自动完成弹出窗口出现时,带有文档的黄色框消失。我不确定为什么。另外,当我在其他缓冲区中编辑 CJL 文件时,我希望有相同的行为(请参阅上面我的帖子的更新)
  • 经过更多测试后,一切正常。当弹出窗口首次显示时,黄色框消失。但是,当我开始选择不同的选项时,它会重新出现在正确的位置。此外,它开始在 CLJ 缓冲区中工作,我看到了字母“v”而不是“d”,如上面的截图所示。可能我忘记启动NREPL了,得重新测试。无论如何,一切都按预期工作。谢谢!
【解决方案2】:

其实这个配置和之前的ac-nrepl都已经弃用了,参考新包ac-cider

(require 'ac-cider)
(add-hook 'cider-mode-hook 'ac-flyspell-workaround)
(add-hook 'cider-mode-hook 'ac-cider-setup)
(add-hook 'cider-repl-mode-hook 'ac-cider-setup)
(eval-after-load "auto-complete"
    '(add-to-list 'ac-modes 'cider-mode))

【讨论】:

    【解决方案3】:

    先出现黄色框,然后当自动完成弹出 出现,带有文档的黄色框消失。

    这种行为是由(setq ac-quick-help-delay 0.5)引起的,因为0.5s太快了

    将 0.5 更改为更大的数字(在我的计算机上工作的最小值是 0.9,但这可能取决于您计算机的性能)或 删除(setq ac-quick-help-delay 0.5) 因为这样会使用默认的:2.5s左右,可以解决问题。

    【讨论】:

      【解决方案4】:

      我在 2020 年查看此内容,ac-cider 已弃用,但您可以改用 company-mode

      使用M-x package-install company安装并按照cider docs配置cider-repl-modecider-mode

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-02-05
        • 1970-01-01
        • 1970-01-01
        • 2020-10-25
        • 2015-10-04
        • 1970-01-01
        • 1970-01-01
        • 2020-10-24
        相关资源
        最近更新 更多