Emacs+;克罗朱尔。项目中所有源文件的自动完成数据

Emacs+;克罗朱尔。项目中所有源文件的自动完成数据,emacs,autocomplete,clojure,nrepl,Emacs,Autocomplete,Clojure,Nrepl,我开发C#应用程序已经很长时间了。商业IDE和工具提供了非常好的代码完成特性。我现在正在学习clojure,我真的很怀念熟悉的工作流程 关于emacs。我已经安装了nrepl、ac-nrepl和clojure模式。自动完成在repl中运行良好。它也适用于当前缓冲区中的符号。但不是为了: 其他项目文件中的符号 外部库(由leiningen管理) 是否存在完全涵盖案例1和案例2的现有方案 我的clojure相关配置: ;;;;;;;;;;;;;;; ;;; clojure ;;; ;;;;;;;;;

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

关于emacs。我已经安装了nrepl、ac-nrepl和clojure模式。自动完成在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)
    
    ;;;;;;;;;;;;;;;
    ;;; clojure;;;
    ;;;;;;;;;;;;;;;
    (需要“nrepl”)
    ;; 配置nrepl.el
    (setq nrepl隐藏特殊缓冲器t)
    (回复t中的setq nrepl弹出堆栈跟踪)
    (setq nrepl历史文件“~/.emacs.d/nrepl历史”)
    ;; 一些默认的eldoc设施
    (添加挂钩’nrepl连接挂钩
    (解除pnh clojure模式eldoc挂钩()
    (添加钩子“clojure模式钩子”打开eldoc模式)
    (添加挂钩'nrepl交互模式挂钩'nrepl开启eldoc模式)
    (在现有clojure缓冲区上启用nrepl)))
    ;; Repl模式挂钩
    (添加钩子“nrepl模式钩子”子词模式)
    ;; NREPL的自动完成
    (要求“ac nrepl”)
    (加载“自动完成”后评估)
    (添加到列表“ac模式”nrepl模式)
    (添加挂钩“nrepl模式挂钩”ac nrepl设置)
    (添加挂钩“clojure nrepl模式挂钩”ac nrepl设置)
    (在点处定义键clojure模式映射(kbd“C-”)的nrepl评估表达式)
    ;(全局设置键(kbd“C-”)在点处的nrepl评估表达式)
    ;;;;;;;;;;;;;;;;;;;;;
    ;;; 自动完成;;;
    ;;;;;;;;;;;;;;;;;;;;;
    (需要“自动完成配置”)
    (添加到列表“ac字典目录”~/.emacs.d/ac dict”)
    (设定值交流延迟0.0)
    (setq ac使用快速帮助t)
    (setq ac快速帮助延迟0.05)
    (setq ac使用模糊1)
    (setq ac自动启动1)
    (setq ac自动显示菜单1)
    (ac配置默认值)
    (定义按键交流模式图(kbd“C-SPC”)“自动完成”)
    
    自动完成应该能够从所有打开的clojure文件中完成,但现在我不能说可以从项目和库中完成。这可能是通过语义(来自CEDET)实现的,但目前还没有用于clojure代码的解析器


    我已经开始在EDE(CEDET的项目相关部分)中进行Leiningen支持方面的工作-CEDET repo中存在一些代码,或者您可以在上查看我的CEDET repo(我计划稍后将其合并回CEDET)

    安装新的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插入一个测试项目并打开它的一个文件时,我在项目中当前加载的每个名称空间上都有制表符完成。您似乎忘记了
    'nrepl-interaction-mode-hook
    上的
    'ac-nrepl-setup

    (require 'auto-complete-config)
    (require 'clojure-mode)
    (require 'cider-mode)
    (require 'ac-cider)
    
    (ac-config-default)
    ;(add-hook 'cider-repl-mode-hook 'ac-cider-setup)                                                                                                                                             
    (add-hook 'cider-mode-hook 'ac-cider-setup)
    (eval-after-load "auto-complete"
      '(add-to-list 'ac-modes 'cider-repl-mode))
    
    (add-hook 'clojure-mode-hook 'paredit-mode)
    ;(add-hook 'clojurescript-mode-hook 'paredit-mode)                                                                                                                                            
    (add-hook 'clojure-mode-hook 'rainbow-delimiters-mode)
    (setq cider-repl-pop-to-buffer-on-connect nil)
    
    (require 'highlight-parentheses)
    (add-hook 'clojure-mode-hook
              (lambda ()
                (highlight-parentheses-mode t)))
    
    (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)
    (eval-after-load "cider"
      '(define-key cider-mode-map (kbd "C-c C-d") 'ac-cider-popup-doc))
    
    这是我的init.el文件。 我的包裹清单包括: clojure模式 苹果汁 帕雷迪特 自动完成 自动缩进模式 突出显示括号 苹果酒 弹出窗口

    您可能至少需要ac苹果酒、苹果酒、clojure模式、自动完成、弹出式自动完成功能

    **安装并设置init.el文件后, 使用Lein制作Clojure项目。(它不适用于.clj文件,只适用于Leiningen项目。) 加

    打开project.clj文件,然后打开源文件并运行:**

    M-x cider-jack-in
    
    然后你必须能够使用自动完成使用ac苹果酒

    M-x cider-jack-in