Emacs + clojure。来自项目中所有源文件的自动完成数据

标签 emacs autocomplete clojure nrepl

我已经开发 C# 应用程序很长时间了。商业 IDE 和工具提供了非常好的代码完成功能。我现在正在学习 clojure,我真的很想念熟悉的工作流程。

所以,关于emacs。我已经安装了 nrepl、ac-nrepl 和 clojure-mode。自动完成在 repl 中工作正常。它也适用于当前缓冲区中的符号。但不适用于:

来自其他项目文件的

  • 符号
  • 外部库(由 leiningen 管理)。

  • 是否有完全涵盖案例 1 和案例 2 的现有软件包?

    我的 clojure 相关配置:
    ;;;;;;;;;;;;;;;
    ;;; clojure ;;;
    ;;;;;;;;;;;;;;;
    
    (require 'nrepl)
    
    ;; Configure nrepl.el
    (setq nrepl-hide-special-buffers t)
    (setq nrepl-popup-stacktraces-in-repl t)
    (setq nrepl-history-file "~/.emacs.d/nrepl-history")
    
    ;; Some default eldoc facilities
    (add-hook 'nrepl-connected-hook
          (defun pnh-clojure-mode-eldoc-hook ()
            (add-hook 'clojure-mode-hook 'turn-on-eldoc-mode)
            (add-hook 'nrepl-interaction-mode-hook 'nrepl-turn-on-eldoc-mode)
            (nrepl-enable-on-existing-clojure-buffers)))
    
    ;; Repl mode hook
    (add-hook 'nrepl-mode-hook 'subword-mode)
    
    ;; Auto completion for NREPL
    (require 'ac-nrepl)
    (eval-after-load "auto-complete"
      '(add-to-list 'ac-modes 'nrepl-mode))
    
    (add-hook 'nrepl-mode-hook 'ac-nrepl-setup)
    (add-hook 'clojure-nrepl-mode-hook 'ac-nrepl-setup)
    
    (define-key clojure-mode-map (kbd "C-<ret>") 'nrepl-eval-expression-at-point)
    
    ;(global-set-key (kbd "C-<ret>") 'nrepl-eval-expression-at-point)
    
    ;;;;;;;;;;;;;;;;;;;;;
    ;;; 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.05)
    (setq ac-use-fuzzy 1)
    (setq ac-auto-start 1)
    (setq ac-auto-show-menu 1)
    (ac-config-default)
    
    (define-key ac-mode-map (kbd "C-SPC") 'auto-complete)
    

    最佳答案

    安装新的 nrepl 和 ac-nrepl 后,这是我放入 .emacs 的内容

    (package-initialize)
    (require 'auto-complete)
    (global-auto-complete-mode)
    (add-hook 'nrepl-mode-hook 'ac-nrepl-setup)
    (add-hook 'nrepl-interaction-mode-hook 'ac-nrepl-setup)
    (add-hook 'clojure-nrepl-mode-hook 'ac-nrepl-setup)
    

    当我现在将 nrepl-jack-in 放入一个测试项目并打开它的文件时,我在项目中当前加载的每个命名空间上都有制表符完成。您似乎忘记了 'ac-nrepl-setup 上的 'nrepl-interaction-mode-hook

    关于Emacs + clojure。来自项目中所有源文件的自动完成数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18259113/

    相关文章:

    jquery - JQuery 中附加字段的自动完成

    Clojure 中的 Emacs 自动缩进 - 它像 CL 吗?

    list - 如何在 emacs lisp 中制作字符串列表的深拷贝?

    javascript - JSON 的 jQuery 自动完成

    emacs - 普通 lisp 帮助相当于 python 中的帮助

    android - 立即在 Android 上显示自动完成

    Clojure:当 html 文件更改时刷新正在运行的 Web 应用程序

    clojure - the -> 宏和偏函数

    emacs 组织模式 : folder alias for links in org-files

    emacs - 如何仅针对 Emacs 中的特定模式或缓冲区过滤编译输出?