2

我对 Emacs 和 Clojure 都是全新的,并且想设置提示和语法突出显示,类似于这里的视频。我已经安装了:

  • Emacs 24.x
  • 莱宁根 2.x
  • 果酱

...然后在 Emacs 中并通过 Marmalade 安装以下软件包:

  • 邪恶的
  • clojure 模式
  • nrepl

我的大问题是这些主要/次要模式如何相互作用,是否有一种“正确”的方式来设置这些东西?
我的小问题是如何获得漂亮的语法突出显示和代码提示?谢谢!

4

3 回答 3

3

查看 Emacs Live,它是由 Sam Aaron 创建的完整的 emacs 配置。他对 Clojure 的分配进行了编码,因此这种“包含电池”的设置非常适合 Clojure 编码。

https://github.com/overtone/emacs-live

一旦你克隆了它并按照说明操作,你就可以使用 Clojure、nrepl、git 等等。

于 2013-08-09T09:57:45.500 回答
1

我列出了我的设置。有些东西是多余的,因为我有一段时间没有用 Clojure 编写了,但我检查了一下,它仍然有效。

  1. 用于clojure启动 nrepl。在适当的目录中您可能会遇到一些问题project.clj,但您应该弄清楚这一点。
  2. 打开源文件,例如foo.clj.
  3. 用于C-c C-l调用nrepl-load-file 顺便说一下,这是将文件加载到劣质进程的规范快捷方式。它适用于 Common Lisp、Python 等。
  4. 用于C-c C-z切换到 repl。这又是适用于多种语言的规范快捷方式。

这是设置代码:

(require 'clojure-mode)
(defun set-syntax-parens ()
  "highlight []{} etc."
  (interactive)
  (modify-syntax-entry ?[ "(]")
  (modify-syntax-entry ?] ")[")
  (modify-syntax-entry ?{ "(}")
  (modify-syntax-entry ?} "){"))
(defvar clojure.jars '("clojure-1.3.0.jar" 
                       "swank-clojure-1.4.2.jar" 
                       "clojure-contrib-1.2.0.jar"))
(defvar clojure.jars.d (concat dropbox.d "source/clojure/lib/"))
(defvar clojure.classpath 
  (apply #'concat 
         (mapcar (lambda (jar) (concat clojure.jars.d jar path-separator)) 
                 clojure.jars)))
(setq clojure.classpath 
      (concat clojure.classpath 
              dropbox.d "source/clojure/include/" 
              path-separator))
;;;###autoload
(defun clojure ()
  (interactive)
  (nrepl-jack-in))
(defvar clojure-server-cmd 
  (concat "java -Xss4096k -cp " clojure.classpath " clojure.main &"))
(add-hook 'clojure-mode-hook
      (lambda()
        (set-syntax-parens)))
(require 'nrepl)
(add-hook 'nrepl-mode-hook
      (lambda()
        (define-key nrepl-mode-map (kbd "C-l") 'nrepl-clear-buffer)))
于 2013-08-08T15:31:29.533 回答
1

这是我最喜欢的 emacs 配置中的操作部分:

(when (not package-archive-contents)                                                                                                                                      
  (package-refresh-contents))                                                                                                                                             

;; Add in your own as you wish:                                                                                                                                           
(defvar my-packages '(starter-kit starter-kit-lisp starter-kit-bindings clojure-mode                                                                                      
                       nrepl auto-complete ac-nrepl org rainbow-delimiters)                                                                                                
  "A list of packages to ensure are installed at launch.")                                                                                                                

(dolist (p my-packages)                                                                                                                                                   
  (when (not (package-installed-p p))                                                                                                                                     
    (package-install p)))                                                                                                                                                 

(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 'nrepl-mode-hook 'set-auto-complete-as-completion-at-point-function)                                                                                            
(add-hook 'nrepl-interaction-mode-hook 'set-auto-complete-as-completion-at-point-function)                                                                                
(define-key nrepl-interaction-mode-map (kbd "C-c C-d") 'ac-nrepl-popup-doc)                                                                                               
(add-hook 'prog-mode-hook 'auto-complete-mode)                                                                                                                            

(add-hook 'nrepl-interaction-mode-hook                                                                                                                                    
          'nrepl-turn-on-eldoc-mode)                                                                                                                                    

(add-hook 'nrepl-mode-hook 'paredit-mode) 

这会在任何地方打开paredit-mode,虽然这完全值得,但需要一点时间来适应,因为paredit 并让 Clojure 的使用变得更加有趣。至少一旦你掌握了啜饮和呕吐的方法

于 2013-08-08T16:15:53.013 回答