Emacs + Cider (Clojure) + Автозаполнение: Как получить строку документации?
Я пытаюсь правильно настроить emacs для написания моего кода Clojure. Я основал свои конфигурации Emacs на этом хорошем посте в блоге.
Однако я изменил несколько настроек, например тему, которую он использует и т. Д. Я проверял, чтобы Auto-Complete (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, придется перепроверить.
В любом случае все работает как положено.
3 ответа
nrepl-mode-hook
, nrepl-interaction-mode-hook
, nrepl-mode
устарели. Вы должны использовать cider-mode-hook
, cider-repl-mode-hook
, cider-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 ()
Собственно эта конфигурация и бывшая 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))
Сначала появляется желтое поле, затем, когда появляется всплывающее окно автозаполнения, исчезает желтое поле с документами.
Такое поведение вызвано(setq ac-quick-help-delay 0.5)
с 0,5 с слишком быстро
Измените 0,5 на большее (минимальное значение для работы на моем компьютере - 0,9, но это может зависеть от производительности вашего компьютера) или удалите (setq ac-quick-help-delay 0.5)
Поскольку для этого используется значение по умолчанию: около 2,5 с, это может решить проблему.
Я смотрю это в 2020 году, и ac-cider устарел, но вместо этого вы можете использовать корпоративный режим.
Использовать M-x package-install company
установить и следовать документации сидра, чтобы настроить его дляcider-repl-mode
а также cider-mode